嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 J' z# ?9 ^0 q
Void UPP_TASK(Void)
2 U- L7 G% t$ X3 f& C
{
' ~) k# y( `5 Y
6 H# x1 F* L5 p; J: p# H
int i,j,k,target_int_count=2;
4 H. x5 J5 G! O4 {4 S9 L
char ch[2];
0 ]) f* o9 Z! Z' @6 Z' c" Q; b
+ V/ V, f' ?* Y0 J) D8 `+ b- ~
5 O6 \) A0 V* Q X* C5 n( y
& s- \, i1 Y- v# p* f+ |3 m
upp_interrupt_count = 0;
% c" P6 |; w" V7 w$ ]& q
upp_error_count = 0;
/ N. ?( d* A! a" u6 C/ W4 C( T$ _
' s9 o2 [0 N c3 @2 f+ ^& S
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 V! E( o. |' r Q
// Initialize data buffers
! w5 A, _! r/ f j. Q& L
for (i = 0; i < upp_frame_size; i++)
# m7 S7 Q1 s; N% m1 f& h
{
; D4 M1 v3 S2 C; Z& g' M1 W6 l
upp_buffer_b
=i;
" i6 L: s( i% U) B
upp_buffer_a
= 0xDEAD;
* D$ m* k% F8 G
}
, L8 i4 y/ P& c% S# a/ P& x
$ I A8 t2 U' Q5 u
//for(i=0;i<1024;i++)
: p$ p; ^+ ~( C- j; i3 P5 m
// temp
=0;
! j/ V* k/ z6 |5 u. T+ X; M
" e, L1 F9 r8 ?' u
//UPPReset();
) J; r0 g# r3 W
/*启动UPP DMA传输*/
! x0 R! w" {. p" [* }0 c! m
UARTPuts("upp_prog_dma_i\n",-2);
/ S, A! J) x7 }9 Q( O1 k# ^
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! U2 C* r) ~- ^( ]2 G1 X$ S0 n
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ ]5 M- x% Q! z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 M- F& u4 n: a3 w
- `5 ~% F" Z- }* J- k2 Y8 R; q
UARTPuts("upp_prog_dma_i\n",-2);
, F! m1 c$ E0 Y3 J
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& ]% o' x+ ?2 q7 j3 k% H
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; ?9 M2 j' R& C t b. a
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 Y, x. i: v2 k w9 W$ C
" Y4 D2 D4 ?- Y4 P; H4 { b% x/ g4 v
/*等待UPP传输完毕*/
" O# o2 G. Z- m" p; t5 p
//i=0;
# w( I) \6 }) z6 p8 a% _4 y& Q
//j=0;
; O5 x. z8 A! T2 t7 h
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( Q" A3 U$ i# \
{
& b( ]$ p/ q/ z
/* 测试UPP传输的同时操作普通DDR数据
) U, ?7 N" p7 K4 K. Q2 s, P$ p
temp
=i;
$ V; g( p' f$ H# m' B
i++;
# L* {# |6 \1 x! W: Y$ ?, A1 M
if(i==1024)
2 ?, c( W: q/ V% Y8 w) O5 Q9 O% {. ^: s( {
{
% e" ] W% Y: k$ u8 o: S
i=0;
% j" f- R" Z" e( }2 v/ }
j++;
1 L% ]& S2 B8 c0 Z2 l; y. h- x+ t9 k$ H
}
. |# r2 ?/ ]+ m) m& a
*/
/ Q ] U& |! R$ b$ O
1 c, c- \! Z2 y2 Q' e; |0 K3 x" N1 ]
asm(" nop");
* ]$ u% l. H" Z/ O6 i
7 h z' W( d. N
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ C5 B7 h/ B! M7 C
}
- r- q$ ~7 _7 {3 h o# f
5 d9 ]4 z) ^( u) z, _( _
/*检查UPP传输的数据是否正确 (loopback modes only)*/
/ h. G4 v( r! x" M" s5 }; g; c
//UARTprintf( "i=%d\n",i);
+ t, p7 p7 N+ w- U) h# B
//UARTprintf( "j=%d\n",j);
+ T" d, G3 Q4 U( x; `
UARTPuts("Data mismatch in buffers.\n",-2);
( p* O& \6 r; V2 _+ F3 I, W6 c
if (upp_interrupt_count == 2 && upp_error_count == 0)
, O% d$ `' k( ?; ?
{
, r3 x( ~* J2 k; ~' ^
for (i = 0; i<upp_frame_size; i++)
$ W" S; A2 ^7 }4 q, G
{
6 d; y# k* |5 k
if (upp_buffer_a
!= upp_buffer_b
)
7 t. h$ d& W6 ^! B2 L
{
' }- `, \- g2 x+ L0 ^; T
upp_error_count++;
4 V- q4 u$ ]2 Q2 g2 y. J5 d- R
}
4 V6 P# V1 G9 e8 _3 c3 l
}
3 c2 h! C! u: I) l; A
}
8 c" O+ z1 F$ b( g) |: l
6 W* b7 L6 `- ~: Q, `; o# Z) v' q6 e
/* 报告通信结果*/
( I8 X( H: W* |- T6 Y# D: R5 J
if(upp_error_count != 0)
\' G. ] \% s
UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 u) k. E& T' s0 ]7 L; K
else
- ^' u, i/ u3 G( k) U; t0 E. i9 ~
UARTPuts("uPP transfers complete!\n",-2);
; E g# d6 V8 G$ I$ ~" R
" O9 f( Q( h3 G0 a
UARTPuts("Do you want to print all the data?(y/n) ",-2);
( q" v+ ]8 C" R4 d9 r/ b1 t& K
UARTGets(ch,2);
: j2 \' F3 a: `7 }' j3 s
UARTPuts("\n", -2);
) a8 B0 a9 f& L
; z9 O- Z5 L6 K* c* |- z1 }
if(ch[0] == 'y')
! B- Z0 _9 H: q8 |2 [
{
0 ~+ K9 R4 ]8 X1 T0 H+ N: O
/*打印全部读到的数据*/
( j$ V5 k2 J5 B
for(i=0; i<upp_frame_size; )
" N' Y3 V% I4 q7 R" {0 |" k
{
# _4 _% ?1 S7 o) T
for(j=0; j<5; j++)
' G J4 d! @/ S* D" A1 q6 d3 H
{
1 L* ^* j: Y5 W5 V9 W1 r
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, r0 Z4 T$ _! L7 v- T; Y
i++;
% O! X* t) n0 q5 A
//if(i >= 4096)
! B' M4 Q' x; ^2 F( }3 q% u
// break;
+ Q5 Q B3 N7 l
# N+ u! f* B6 ?/ b. g. j/ ~0 L
}
1 w' Z" B' Y- I9 r
UARTPuts("\n",-2);
, h( G" b( q, t! I+ p
}
, r* k+ u3 n: ?: \. _- m5 ], Q0 Z
}
: C* F1 d1 d" _3 K) J9 l0 ]
! H' [, r# O5 n
}
) _4 i- q: j r. }- a0 }, ~ A+ n
7 t8 Y& q3 R! \! m4 |) b( y* s$ P: R0 l, y
6 d" c; } X/ v8 F9 a% h% r& a
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; {# f' }' n( k! S
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 l6 q' `( R' n3 e3 V% u
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4