嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
. t) Y2 W; X8 a- ^
Void UPP_TASK(Void)
$ x* y7 _1 [" w
{
/ z+ \* c+ ?! J& O6 K' c
2 n# g4 R7 l& W
int i,j,k,target_int_count=2;
. H3 x Z8 ~- Q7 |/ d
char ch[2];
$ X* L8 t+ {7 L0 d, B* T' W
2 M( L& y; \. @; Y1 g* s. }
/ w# Y0 r" m$ W6 ?7 B& \) J
0 Z0 E4 E5 K2 `+ j8 ~
upp_interrupt_count = 0;
9 L5 m5 u: s/ l- e3 G+ w; O( c
upp_error_count = 0;
. d" J" ~$ S, w3 m. J& {) N% H+ a+ q* P
+ }8 M) w2 Q& _' C
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 L0 N: q5 Y/ ]) T9 ^: x% V- y
// Initialize data buffers
0 W9 O6 I( U0 p3 l5 T
for (i = 0; i < upp_frame_size; i++)
6 C8 p E: d* p8 z/ _4 D8 T; h( w2 Z0 ^
{
; I1 t7 l; s, C" X
upp_buffer_b
=i;
( C$ K% }) H( j( }2 M
upp_buffer_a
= 0xDEAD;
- l0 S+ ?& R* c* Q8 \( v6 S) X: w
}
+ @& ]; E7 ~2 l# r' @$ A' K' I
; o8 @* t; L+ f. U8 E' F, t( i
//for(i=0;i<1024;i++)
! x# t1 A/ O* j N7 g
// temp
=0;
; u# e' y# W. U& O
$ v8 D& \6 V, t2 z' c& u: J
//UPPReset();
, x; f5 y3 D' k9 A
/*启动UPP DMA传输*/
. h* d. J, n* [& Y; J
UARTPuts("upp_prog_dma_i\n",-2);
' j" V$ X$ k. g5 X3 t `6 c; r
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 w" K- ]4 g9 r9 ?9 H5 P2 c
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# n- V6 f% r5 F% g" F. k, w; [4 k
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% u) l9 F; B+ t. V% y% R7 N7 |
2 Q+ h. W: q! _) p& G. O
UARTPuts("upp_prog_dma_i\n",-2);
$ d1 _) V+ {0 Q2 z
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 v: q* z0 i1 z4 ?7 z
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& u2 f$ \. x; Z8 S
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; W# f8 S3 J1 ], i G7 Y1 Q* l
/ P! ` b$ U3 `: t* @
/*等待UPP传输完毕*/
9 ] s/ d* G8 T8 |/ z
//i=0;
5 J# W) t8 m4 V( p* q9 r, G$ L
//j=0;
! u* ], j1 b( ~" W2 I( d+ v
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# A# Q' ~; K% u6 e6 @; {6 g
{
/ x; W" j2 [$ r0 P# w6 p8 H5 h
/* 测试UPP传输的同时操作普通DDR数据
' ?4 W, j0 Y5 u% H# F" [: s/ F* N+ q
temp
=i;
1 ] g; h' Z& w! x
i++;
0 s; k9 ?# c) o- u2 m0 z
if(i==1024)
/ _& t9 X. ?( j8 B9 s7 q
{
" t( z# C; `8 U+ r9 B; _0 K
i=0;
3 o! H. _' }/ b) b. l) N: N
j++;
- g2 {* M# x5 o+ g I6 ]
}
2 w0 u3 f) v: Q( E' F, |
*/
7 y3 `% ^1 M, s3 w' v
0 b) t+ q9 H( y
asm(" nop");
" B; ~; ]7 r6 J1 [& B
" T6 L; [# S. }0 p. s, y0 ^; ~
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" W2 H1 s8 q5 D
}
, A8 e2 i t" B% I7 G0 x/ D
; l, J6 ^9 S' ~
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& f' W" `% ~9 |5 f6 u
//UARTprintf( "i=%d\n",i);
! K& k: D; S7 e. E$ ?' {- v
//UARTprintf( "j=%d\n",j);
7 p$ k+ `2 v' \( U
UARTPuts("Data mismatch in buffers.\n",-2);
" K R$ C) S& v! U% D0 }. x6 E1 \
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 w) r* r9 K& e' t* i7 B9 N- S
{
+ n8 t% G1 u7 P* R
for (i = 0; i<upp_frame_size; i++)
+ d. E @: d8 g8 _: }; t, j+ X) {
{
4 l) n! t9 y l2 \" \3 s7 N
if (upp_buffer_a
!= upp_buffer_b
)
7 {$ @' {# M' |% S' z
{
3 S$ G3 N: p2 H E3 f5 y
upp_error_count++;
) y4 O9 i9 }) f: E& n* D7 z
}
' u! L4 D0 k/ \! u6 x
}
; ^' l# N6 o. |& ~' E0 I( B
}
0 C' _0 X# W4 x- I( o- K A J6 X
^' Q" x: M( x
/* 报告通信结果*/
1 z0 [1 d2 \ W4 l2 C$ Z2 C$ a* g
if(upp_error_count != 0)
4 ^+ J6 x8 Y' e- X# e% O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 @* _' L' b: G. p7 D7 x4 Z6 a
else
; f( j& M+ P( v2 I7 o
UARTPuts("uPP transfers complete!\n",-2);
; i) n/ T- ]- o' z
; b# o! {+ i; K
UARTPuts("Do you want to print all the data?(y/n) ",-2);
1 z3 Y, R$ _$ _7 t9 w
UARTGets(ch,2);
3 c2 P6 L- f# s- H( E
UARTPuts("\n", -2);
- W/ G6 {& E: _4 y2 y
; n% C4 t3 [; L7 P$ i- {/ I
if(ch[0] == 'y')
, w: y- a2 u4 P6 t5 D8 V3 U7 h
{
* N# u u" B3 i$ r Y
/*打印全部读到的数据*/
7 l% s: u/ `1 t5 M% @
for(i=0; i<upp_frame_size; )
2 [/ w6 d: K3 m' }3 s. S
{
7 b0 c: J* @8 A) f
for(j=0; j<5; j++)
. R; S3 J& F% p
{
+ x1 I' f! F& a0 Q6 j5 [: T
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- j. E8 Q% x4 z: J6 n
i++;
( a' N' N) Q1 v2 M
//if(i >= 4096)
/ M5 r( ?) J: E( p
// break;
- ~+ J- b# h! F5 ]+ P$ U+ Q. d' F
% E6 s6 g0 D( N1 q, m: d, T4 ~" o
}
) h a# P6 K+ B6 E- C6 @3 s
UARTPuts("\n",-2);
0 z3 I* L' w+ X* O9 K; e! C
}
l8 v3 G+ V d) ^
}
' I: |5 y: O, x: [! W, ?
- E: A4 ~) K; A( _
}
8 f9 D. a; d# G% M+ N8 f/ W$ i
; R& N- q! a' x. b+ M0 L' C( F
. a( O$ @9 U9 Y& O- J8 l
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ x0 d; z& O6 G; g1 ?' a
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* d3 P% l4 o% [# E/ q! z* e
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4