嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% k ^1 T/ x; o0 n- G+ x9 M5 \
Void UPP_TASK(Void)
( e. \6 a* H( U# i5 l4 q
{
& h- \0 I( s4 [9 S
, _1 b" n6 l L0 ~/ M( z$ ^
int i,j,k,target_int_count=2;
* m( E! S1 v. ^: q1 U
char ch[2];
& A% w; _7 V2 _& c
* c. H+ k" l3 P4 L- [' G; o& S& l
4 g* l8 p+ d7 L
: V& u" j* @( R
upp_interrupt_count = 0;
- }( y" G4 D" H0 ~2 z
upp_error_count = 0;
* }6 ]3 u' f0 c: W. s, j
8 D) `! k5 G) [( ]
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* p+ Y5 D4 r" G6 Z. Y- T. w
// Initialize data buffers
a. {+ f- _, x: B2 I+ f0 e: Q
for (i = 0; i < upp_frame_size; i++)
. M$ x8 F0 X! Q* U' ]9 h
{
0 G/ l3 w+ b H
upp_buffer_b
=i;
$ a& ]& {$ v/ ]
upp_buffer_a
= 0xDEAD;
% \4 p/ n2 U; B. }7 u7 L9 M5 u
}
L: s9 q0 v+ R, a
' Z7 J% d+ w* D3 {+ V! u( P9 b" @
//for(i=0;i<1024;i++)
3 X# N! w; p1 F. B" I; s7 E
// temp
=0;
" }0 T& ^' j+ a/ c% b9 I* M# w
- g1 @8 ]+ q7 o9 Q& Z* Z4 H
//UPPReset();
, _# f( O2 T- |% l5 B
/*启动UPP DMA传输*/
2 U6 R% n! m( p" j
UARTPuts("upp_prog_dma_i\n",-2);
7 k$ j+ w& m' d& Q8 J
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( `( J8 T* ~3 E+ P# Y8 x( p7 p
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" N0 |7 V' X ^4 G1 s% |
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ s7 {& Y4 g5 J. [
]2 M- p1 A/ ~) m8 B. l
UARTPuts("upp_prog_dma_i\n",-2);
J5 N( H7 T$ A5 F& x) Y3 {7 _
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% t3 E2 H; ^4 q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 C7 B |$ p! y' v" @1 X- `
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ H# y z2 \% I. t, D
5 }3 y5 P! `3 r
/*等待UPP传输完毕*/
2 _9 Q0 U9 d5 }: ]
//i=0;
8 k& S5 ]6 J! E! `
//j=0;
# z, k& _* e: o& J) e' V2 \
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 t1 P9 k) t7 P% P+ E# L
{
3 c3 `! M; `$ e9 a4 i6 H
/* 测试UPP传输的同时操作普通DDR数据
: A9 \, {% C* [9 ^) n; T, ^: D
temp
=i;
1 i7 O: }: o+ [- q; \- j
i++;
2 M- I+ k1 b6 q, Q
if(i==1024)
6 i( F! O+ t3 N3 |6 s) ~
{
6 [: } `6 O: Z3 K
i=0;
* D7 ~4 u7 G+ [/ Z6 A
j++;
. U' U9 k+ ]$ z3 h* S- T
}
" T! _* N2 j7 u2 B# h! D9 P4 j* j
*/
+ D. B9 t& L8 p' \) l9 i, ~5 r! W
7 y5 A' D9 T$ G, Q& r! b
asm(" nop");
- M& F2 [5 Z. r: c3 d
5 C6 M/ [/ e" h: `+ n
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, z( {1 z0 a6 j% c% @: l
}
( R, Q( U( `9 B7 R2 F/ x+ M- N
) M( f9 {: o! R- z; z6 _: g0 R
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; C9 N% X$ h( l1 l+ C
//UARTprintf( "i=%d\n",i);
" J0 S; i: F0 P% W; s2 q
//UARTprintf( "j=%d\n",j);
3 D0 }1 a0 h% O* v( p1 i$ e8 e
UARTPuts("Data mismatch in buffers.\n",-2);
# ]# D) c4 v/ F3 n$ X8 Y& K; Q
if (upp_interrupt_count == 2 && upp_error_count == 0)
; b; w' o9 E' j5 s7 O; v
{
7 l* T/ N6 m3 y' d! b* B+ o! p, [* q
for (i = 0; i<upp_frame_size; i++)
/ L& z* A: P, {
{
* U+ a. L$ V/ L! y6 M
if (upp_buffer_a
!= upp_buffer_b
)
5 y( A$ v% [5 D) [! S
{
# n8 d4 `, l/ R1 [, K) E6 g
upp_error_count++;
6 Y: `9 \# z9 ^5 ~. ?" c2 s
}
( h, ^" i% S7 P0 v( ]6 t
}
$ u9 L/ x. @ w- i; i* _( o! Y
}
7 J5 S6 @2 S9 \1 t, `! p4 F4 F
% r1 ~# U1 ~4 s' |" I
/* 报告通信结果*/
" v) l& z( {9 h! g
if(upp_error_count != 0)
$ m3 Z2 }2 }3 _
UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ p9 P" r3 `# {6 r# e* l
else
( }5 ^% T: @6 L# d, A# c1 G
UARTPuts("uPP transfers complete!\n",-2);
6 z9 k( d: R) w. a& U! @) D( ~4 M8 R
0 M1 a4 J" \3 d) P% Z8 m$ O4 Z. w
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* d4 p& C* s3 D2 i
UARTGets(ch,2);
' o {; U% e) l2 K" I
UARTPuts("\n", -2);
! f0 O, h7 r# c1 M. y: w
9 \; ~5 Z. t, _/ l6 i4 O
if(ch[0] == 'y')
& f1 _# ?. x% s0 H# f: ?
{
# I* z8 F2 E% F+ @7 N
/*打印全部读到的数据*/
) G1 }7 a- n: U4 m2 p6 V8 S
for(i=0; i<upp_frame_size; )
" C+ }5 u$ l6 `8 _& z: P
{
4 S1 Y8 D& B$ |" t+ a: F) U( {
for(j=0; j<5; j++)
- e# h$ d0 X. @4 W
{
9 p' s0 r ^/ P9 C& w- S
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& _* O( J8 `+ ]* O% @; d$ u+ M+ u
i++;
/ M+ f3 @2 v1 y. Z" b5 p
//if(i >= 4096)
e/ L f, `& S! _
// break;
8 h* o7 S9 R3 _" \ O* w
- Y2 b3 B7 \6 d) j
}
/ O8 e% c1 q( K+ P: M
UARTPuts("\n",-2);
& G9 J' e. X. T. O% N+ \
}
% q, x" `) L' G* W+ z% j) A! u; H
}
) {7 a; q$ B, p b3 d. J+ T8 ~
9 r3 o' d( ]3 f* h) |7 d
}
7 u3 I. O% x& a, y
; T, k) a B7 q8 I
; K9 }; ?! X' |: q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. b' [) \! t7 `! }8 g
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, N! \; ]" L# Y
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4