嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ |+ Y+ i6 Z, t3 M$ @
Void UPP_TASK(Void)
, i5 D0 |! D$ X+ [' S
{
1 M" n% ]7 V) G+ y3 h9 `* ~+ e
. D: j' b) T+ ?! e4 O) u
int i,j,k,target_int_count=2;
* d4 o6 @0 M1 S* m [6 f
char ch[2];
# V0 J" k) m& y- ]
\5 z5 J: r( z
- ?0 p1 E* D) i7 t! b3 w! V
6 V& g p' f: U3 Z& V! ]( f
upp_interrupt_count = 0;
X I1 S4 c4 z6 I4 i
upp_error_count = 0;
$ h2 {/ J* T% M1 n
: L% \% P& t! U0 p' c
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; w4 `9 o5 B8 g# h% d
// Initialize data buffers
+ J7 _0 R U" A6 R& @8 X- q7 m
for (i = 0; i < upp_frame_size; i++)
' X+ |' p# @3 |& c7 }: Q2 l
{
, e: v' w4 R6 n. g
upp_buffer_b
=i;
" v. q; X: h/ c' h3 z
upp_buffer_a
= 0xDEAD;
* _' Y( B3 D& g
}
& f5 g- ]- Y' M5 g+ _
" h7 H, v1 n! m6 z: Y
//for(i=0;i<1024;i++)
+ Y6 B0 o# s5 r( A& R; U
// temp
=0;
" O8 \. V5 j2 z$ |' Z
3 h4 ~# V' ]6 F; p6 Z: d( Y7 D2 S
//UPPReset();
" C# c7 e3 X" |: @1 B( j2 W! P
/*启动UPP DMA传输*/
* X* z9 [4 n9 m9 o0 q2 N
UARTPuts("upp_prog_dma_i\n",-2);
1 D/ l. t: W3 g- }, c
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
?! T& y, y* w
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& L/ g5 o: a9 v% D: g$ Q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% q2 y0 ?2 J; E. ^4 C8 ?
3 M0 H* u$ D- Z! C
UARTPuts("upp_prog_dma_i\n",-2);
! u( {/ _7 E8 F6 ^
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' _* f3 ?; ^' ]# P+ E! m8 l
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% n2 V$ o% G! U* y# a$ l: |
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# O% t* U1 o1 A6 p- o2 C l3 ~3 b
6 w- O' {# m* y5 y. s$ z
/*等待UPP传输完毕*/
. s1 e$ j, N) }$ z$ G- ~2 o- T+ L2 d
//i=0;
$ L O0 w( o: w
//j=0;
7 p0 Y! d7 l5 I' v
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; E5 W8 v, l# d# `+ M8 e+ J
{
. Q2 J8 |9 W+ O, g; \$ |
/* 测试UPP传输的同时操作普通DDR数据
3 p# ~. J$ b" q4 i, M7 P7 b/ _! W0 g
temp
=i;
0 U+ q% I6 S: |) M* I h6 {
i++;
( P4 p h; d9 x6 Q o! h
if(i==1024)
/ R' P) m8 ^, \$ I1 s1 K
{
( D& Q/ ?' x! v
i=0;
3 U6 g: H9 n U9 k
j++;
8 r5 Q( E* {8 z2 I
}
/ ]2 P6 b& C9 H N9 E" C
*/
0 }( O# P+ A! P- j6 B0 z
& i/ z2 i+ u* X. I) M
asm(" nop");
6 M! T0 l, n2 z. U& }$ D6 C
' T, q" v+ Q' S2 h t# C% ~- P( k
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 C" M( Q3 W% ^$ h0 |( A% B- K: ^' y j
}
. J2 T- v7 t* g$ l. A' y/ C+ \/ X; T
/ d# `+ _ Y" ]' u
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ v; ]$ s" V6 ?# f& W
//UARTprintf( "i=%d\n",i);
6 i5 d, _9 S9 ` l% G! s+ r
//UARTprintf( "j=%d\n",j);
/ s$ S# O2 k! d- k; E
UARTPuts("Data mismatch in buffers.\n",-2);
5 B0 g) r8 |& m3 P' _
if (upp_interrupt_count == 2 && upp_error_count == 0)
2 O8 W! l& p$ s& [6 S0 T2 L
{
+ U( K# ] P6 P4 X+ U
for (i = 0; i<upp_frame_size; i++)
5 i$ G/ |1 a3 P+ y8 u* b' p
{
7 B6 t+ A( n5 J/ b- T
if (upp_buffer_a
!= upp_buffer_b
)
+ _5 V) p6 ?9 I* w; m# C3 l- Q6 L
{
; u- q1 @8 @" Y% u4 R4 w5 {1 E
upp_error_count++;
% c. U' W O! ]# b
}
1 V2 L4 M' W! S. k# ^6 @) M
}
( T' r- V" C2 ^; z" D
}
" y r' M4 ]8 m
; z' X4 N% r: o- @9 B" y1 e* U/ w2 a
/* 报告通信结果*/
6 g. l- d0 K, I F8 @
if(upp_error_count != 0)
4 a/ i( R+ O! H( c3 w' H
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# a- y" B1 J4 a" W* z; q
else
/ |* G: V) Z6 i
UARTPuts("uPP transfers complete!\n",-2);
& Q5 o. A9 s. W$ s/ P
. h- _, I5 x6 d1 v; E0 l# N% k" s
UARTPuts("Do you want to print all the data?(y/n) ",-2);
$ z0 }" B1 r2 g! [' D' h
UARTGets(ch,2);
! u2 ]( F* s$ @
UARTPuts("\n", -2);
" ]) D2 g4 F( N
/ s2 U% h, T# J* F* g" Y9 x) u
if(ch[0] == 'y')
6 h ~8 `; M6 m, }* y
{
# Z* v4 ?$ n& G9 t; d
/*打印全部读到的数据*/
$ e9 J4 F$ I j8 E0 o
for(i=0; i<upp_frame_size; )
! I8 c& z- b) R1 N/ B- A
{
* [. ]7 G. W3 {$ F" K
for(j=0; j<5; j++)
; Q+ M; Z7 h0 S
{
( O* U& Y% }# I8 Y/ Y
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 G- T+ {9 [* C2 U
i++;
0 ?3 j2 V# Y- X, ?: x7 n
//if(i >= 4096)
/ j+ j! M6 L0 n2 }* e
// break;
; `6 x- m+ \- Y0 Y+ J" j8 }! S
! b/ r! O& [" y
}
5 J4 ~1 x5 G ?# `8 B
UARTPuts("\n",-2);
: H8 E# n, C2 [3 ^+ {
}
8 V9 D* z; n1 @
}
O* \7 K3 h) l, V6 S; h+ T
4 c1 f8 C( l& I! y# Y1 D* G8 D
}
) O4 W9 k9 k7 Z$ }" u
# v& b( _( t! r" P; E2 \2 e( Q* d7 d4 N
+ `' R# p L# a
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! p% R6 S# N( G
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% Z! g- K$ E' [! M
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4