嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- i* T6 |5 Z* [& P% A
Void UPP_TASK(Void)
+ u0 E, S- i" g4 ?. {; v$ ^& F8 r
{
: z& P& s: Q9 M" |
7 x5 u9 r! k( T/ Q
int i,j,k,target_int_count=2;
9 e5 N* w/ a$ \) Z8 o4 W
char ch[2];
. G" l" L7 ?: {3 {$ J% [' f" b- n
1 y" z- s3 e" h" e7 }
& I6 g! o5 a& m$ u; f- x5 l \
4 l- n" a' [$ U
upp_interrupt_count = 0;
; m) b- }7 c, p+ A& Q V
upp_error_count = 0;
' K7 O9 F8 l2 r; j) F- \6 a
7 ^" J- }, R7 f: k5 b% H
UARTPuts("\tResetting uPP buffers...\r\n",-2);
) o1 `0 C$ ]4 n; x* g" q4 L
// Initialize data buffers
/ l5 e+ d# {; D( T" ]: x) {
for (i = 0; i < upp_frame_size; i++)
' b# n9 l1 y* c8 n3 P
{
& Q1 r3 E. p6 E! Z; G# |4 Z w# C
upp_buffer_b
=i;
0 e2 x5 e8 N% J7 \9 @
upp_buffer_a
= 0xDEAD;
; D0 N# j, Z- _* Y5 p1 I
}
' a7 C& u! ^- C b- U& x- V& ^, A
2 V/ R U8 d6 A- S1 T) M# z
//for(i=0;i<1024;i++)
. O$ v( Q+ K! m0 I& r+ P" Y% ^5 L
// temp
=0;
3 Z5 e2 F$ r% @: V% m: Y
; @8 ?& _) ?' c4 A5 a
//UPPReset();
: U3 l; U# b& e" ~- F( `6 R! y
/*启动UPP DMA传输*/
) C: g: ]6 }6 t. G) H
UARTPuts("upp_prog_dma_i\n",-2);
+ ~! X( T2 q, S- m
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; @; |2 `3 \) |( E3 R# D
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: g& K/ M; M' M8 C. \
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
i/ z% E9 D, M, f* \9 d3 E
9 K" t! ~" y, o" I- F, y
UARTPuts("upp_prog_dma_i\n",-2);
9 ?% p: r. z; Z$ p' p; z
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 m; d$ l1 p2 K3 h
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" @( }8 s7 `5 }4 `6 z/ }5 c1 a5 |# d6 ]
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 r. Q$ x- S% {! F4 k# k; u2 E
7 m7 ^3 V6 m$ T
/*等待UPP传输完毕*/
, }3 [9 j+ X: l7 J1 z& g$ [
//i=0;
8 f& S" P0 r$ {
//j=0;
& \- `& }; o1 @6 Z. H. C/ Q# ]
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ N) }$ C* c! _% Y' L
{
& A: M& U7 J. I. E2 u
/* 测试UPP传输的同时操作普通DDR数据
3 L7 F) {- Z1 F% _# m) c% }- g( Y" M& a1 I
temp
=i;
( _) Z. V$ M6 Z9 b3 E5 _
i++;
! h/ m; Q! Y% W4 n, ]
if(i==1024)
0 W% b, Y: b1 D3 J( x z# y
{
# q0 E K* u2 z* C0 S9 H5 ?. T8 q' U
i=0;
9 k/ \, W6 Q. H$ K! a. r1 p
j++;
, }; ]2 j0 P: ~0 y) m8 q
}
" ?) Q/ l1 b3 A! S% ~) t9 X
*/
3 ]7 g- ]2 {# Z* F% P9 Z
2 J% S G4 Y! h
asm(" nop");
3 N C. c# O! q# b6 f, x- v! t
1 m6 K1 ~" |2 l7 a4 T
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, S1 j6 n( a- v5 \
}
/ d, ]! j" S9 U) d% e
* I3 Y% H1 |9 }
/*检查UPP传输的数据是否正确 (loopback modes only)*/
) ~0 q! [' `+ _' J& i! u
//UARTprintf( "i=%d\n",i);
& O: J* d$ T3 @
//UARTprintf( "j=%d\n",j);
! W) a- }1 C% z( @5 u8 S* s
UARTPuts("Data mismatch in buffers.\n",-2);
|$ R' @7 ^ F6 P7 s7 v9 B
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 ~/ Y) |1 ]+ R4 `% F( W
{
O9 }' C" Y# l% l* x+ [+ L* ], u
for (i = 0; i<upp_frame_size; i++)
8 M% M7 b2 }6 I0 X. O
{
: r, x2 H& ]3 w
if (upp_buffer_a
!= upp_buffer_b
)
. O4 M' u+ k) s6 @/ m# g. r$ x% e
{
; @9 d) {, o: s5 R0 A, N7 r0 x
upp_error_count++;
7 l" J; Y) w' @9 ]
}
7 G, `5 J4 s# V+ o- A2 k
}
: Q) c$ B. A# s4 `1 ^
}
1 C( t Y) Y& k, y2 f
: u9 `# z5 o- Q O( d0 Q
/* 报告通信结果*/
. R* V# y( x" c% d; d" b# D0 J
if(upp_error_count != 0)
/ ]8 |6 p& f) g% v
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( ]+ H$ R- J: L' Z* A V- t2 E
else
' @" ^2 q/ Y; O: E
UARTPuts("uPP transfers complete!\n",-2);
& m$ p# F" s5 B6 A5 \' C% o. P
' Q" T O# p, o, W+ b8 k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ V" M; L+ f2 x {0 a
UARTGets(ch,2);
% a) T- `$ J. {1 d4 l5 S
UARTPuts("\n", -2);
- x% l$ k; C0 D. _. @( i
5 x2 X/ Q- k" D. C
if(ch[0] == 'y')
7 A& s% N P% e# ] N: X [3 ` x
{
( V, o, S- }6 d
/*打印全部读到的数据*/
8 U: g/ _5 ~% G; m
for(i=0; i<upp_frame_size; )
7 x# s P4 K% Q
{
8 B) W6 e. c C. R% x4 c
for(j=0; j<5; j++)
1 F" U1 v5 K6 ]% H
{
2 o2 M' m" O/ W* \- {
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ a( _' h2 a/ H' W, d( t# @
i++;
o4 n9 e X% ]# H. G ~2 H
//if(i >= 4096)
$ w8 Y) ?. @7 n
// break;
2 u' M% }6 u: P) p8 b5 U3 ~
9 P) y9 M; ]' N3 u2 }9 E1 _
}
6 {- _" j) y* _0 `& I
UARTPuts("\n",-2);
0 U" J( g) ^, N
}
1 v) C) |1 B: v& w% c9 _$ M+ X
}
$ N5 i3 |: ]' `" [) B* _: w
( B% R" c9 i+ s* {
}
7 ]1 L Z6 R6 Y3 j- ^/ z
; |5 e1 T, x7 U. a& l7 d' Y
; [ ~5 C6 Y. x5 X( f
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- k" x( ]; m4 A8 j/ o: H4 a
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" k: u# F+ h0 d% K9 J) x1 B6 ]
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4