嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% \. ~- B8 |( l* m5 [ {% O4 R$ ]
Void UPP_TASK(Void)
7 M5 `' u: ]( r7 D9 P( g1 y
{
3 P2 |6 D) o1 \0 b# A0 q) Y: g
" c9 H0 o& N4 j: ^/ P5 u N" w8 ^
int i,j,k,target_int_count=2;
# P) t) b+ I7 F- J
char ch[2];
1 _ X: W( a6 l
0 b; p0 o' [+ X, \3 J) |7 z% m
E. u) _* z; u5 G2 ~- U9 |
: w X8 g" L1 F
upp_interrupt_count = 0;
0 n8 v1 m+ u$ j5 o. R% b" W
upp_error_count = 0;
% c/ ?. M! s3 ^9 T
. R4 j S8 v. @( |* v
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: T; E' O6 Y P! G& R
// Initialize data buffers
, }; R7 y: U, a* U9 V1 I! A7 m/ k
for (i = 0; i < upp_frame_size; i++)
/ O- b( E: A# S" u5 T' D
{
w" _+ G/ l- p# _0 m5 @
upp_buffer_b
=i;
& `; w4 p, h/ q% _9 u
upp_buffer_a
= 0xDEAD;
& z/ C0 C7 U9 b
}
7 n5 f; j6 `' l' c+ S, Y
7 Q0 T& g- }+ o) n$ Q
//for(i=0;i<1024;i++)
: }3 X, W* Y% f& X6 f, H1 P* p8 @
// temp
=0;
: X! g0 s* v' j4 U, ~3 r
+ O% J' J8 N3 O# N! q7 ~* r9 `
//UPPReset();
0 Y/ z3 ~# S8 y: m6 i
/*启动UPP DMA传输*/
I: m% l# H6 a, X9 s3 Y3 P
UARTPuts("upp_prog_dma_i\n",-2);
0 c6 X, b9 ~3 I6 e; G& V, s ~
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' W! v: t# G, e- A- M
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! M2 \8 }% k0 y( T* c; g
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 J" V- l ^- Z
) Z4 l" K4 K) @% a4 ~
UARTPuts("upp_prog_dma_i\n",-2);
' ?- L% z9 \1 z, |
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* D' m( ~2 R- Z" x6 K
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ H9 X5 ^& _* K- @% \- A& k$ E- g
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. v+ o$ K; f: c2 D6 [
6 J; `( Z2 {; E% \" o( G
/*等待UPP传输完毕*/
: e; V/ g: n; t$ k7 f% M& v8 F
//i=0;
~& U" M. w3 i; E
//j=0;
: Y1 f, d0 z5 L$ f
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 _; m) n2 G0 P2 G
{
( {: O9 o( `, D) t( {0 g
/* 测试UPP传输的同时操作普通DDR数据
5 q W+ Q. i: j6 y( h4 l, u
temp
=i;
2 x o9 o4 J4 C& \
i++;
1 j4 v5 i' }7 f/ E$ H( h, F
if(i==1024)
& w' {3 g; Y* n! L
{
( _) R! Z+ W Z) L# q, \1 ]
i=0;
0 I# r4 C/ m [& U8 T
j++;
7 i2 u; S: ~0 a0 ?
}
& z8 z+ \$ _9 t2 R& P
*/
+ |! A# Z3 d+ V3 C* e
: g: T( R9 V# g5 a
asm(" nop");
# X/ c' f2 K5 Z- i( B
, w9 m: Y* S9 p" h/ |* Q4 Q, M
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ y- w, B2 T" N# d9 _+ g5 s
}
# A! n$ V8 @) D7 c4 k- ]- M
. i! q6 r5 o# c# Z& Q. B+ v* L
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" s5 ^( R8 [: E" O7 [! u
//UARTprintf( "i=%d\n",i);
6 G% s% L& t$ k) c7 y
//UARTprintf( "j=%d\n",j);
4 x+ c* J! T9 [$ ]
UARTPuts("Data mismatch in buffers.\n",-2);
3 [) d* A3 X* |& n; ^$ b
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 T* O0 ?9 U2 a
{
/ `- E6 p; i7 B- }" V. ]8 f) E8 `
for (i = 0; i<upp_frame_size; i++)
1 o8 {. w* A4 I% }# R2 l
{
& V$ X7 g! H+ v) D6 N s- U; a
if (upp_buffer_a
!= upp_buffer_b
)
$ {: `# M5 g6 t. J Z
{
: Q5 Q- A& s, G
upp_error_count++;
' |; u; x! ?- q% I1 W7 t& i
}
3 {$ ^3 h- ~$ j- g' S: |
}
5 }- q4 s9 ?8 P* ]7 ?
}
. Y7 V1 {% s2 C
8 B8 u: w5 a% b% S; e
/* 报告通信结果*/
* X( J" P2 k# q& e; s [( X
if(upp_error_count != 0)
9 A# V6 l7 `: l$ E
UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 j7 h: S/ x; i1 |
else
$ k' p: ~" k& L: f( m! f1 f8 y$ N# p
UARTPuts("uPP transfers complete!\n",-2);
& f0 A9 w6 ]7 O" n7 E B8 v
8 W5 L8 B: B7 Y! g1 |
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ B. D7 D' v/ y7 x
UARTGets(ch,2);
& k: |; U2 _+ T5 S- X/ z
UARTPuts("\n", -2);
( i, b! H" k h- _
9 F% j1 U' K) ~& } b6 Y' K: E
if(ch[0] == 'y')
" z9 C! i$ r2 R3 X
{
, B" h3 ]0 v. Y. j! M1 o
/*打印全部读到的数据*/
( w: i2 [& ]. ^
for(i=0; i<upp_frame_size; )
4 r6 T- L( P* h- ^2 W- l& U
{
- q5 v+ n+ M/ X) B% i, p" v& b' C
for(j=0; j<5; j++)
0 ?* j- o# |9 V1 [% H
{
( p$ I3 x6 y: E* Z) n8 a d
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
0 c+ z! j# h4 G" r% z. |
i++;
6 S" _% l" ^( u1 I
//if(i >= 4096)
/ {& n) L* j [" `
// break;
' I0 ~. w5 ?3 z# l/ [1 L. w
6 _' t1 l/ q$ s& C* B% Y8 U. g$ w
}
. f3 T4 D8 h J3 _
UARTPuts("\n",-2);
$ b% i6 S+ \, `+ h% y4 ?
}
' c! E* s) N# K1 T) o
}
! x/ }% a* h+ Y
6 y' k* w$ C( U L
}
8 b! L( d! {6 f$ W' Z; Z( \: k- l
& M i) o( {7 H
2 p) U1 p1 O3 ]( @2 M; M8 s
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 o* P2 }1 D2 @% \
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. @, Z, t& j. N1 c9 E+ e
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4