嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 \8 p0 t8 O, e0 L
Void UPP_TASK(Void)
6 q: h! X1 R: l9 S0 U) }: c! X6 _( q
{
+ }1 f/ ~0 o9 ~* r& n2 Q( t
3 s' ]. d* A% y! T* |8 m3 I1 M& b( B
int i,j,k,target_int_count=2;
* w. Y0 I& {; g0 {8 z
char ch[2];
) s, u+ k B- q
6 s/ m0 ^( N4 t2 c
- y: G4 Q9 ?3 s7 E& l+ Y5 l( U
) z# o. k1 ?9 G, @, L6 x+ I( K
upp_interrupt_count = 0;
8 |) _5 o$ K$ ]
upp_error_count = 0;
2 n* j! K: Z# ?. ?. P" W
# Y6 t: n) P9 m% Y `. G
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( a2 t1 }+ D- m/ H7 d6 w
// Initialize data buffers
2 ]6 ~9 O9 K% S" a( |
for (i = 0; i < upp_frame_size; i++)
2 q* N) S9 J; D) Y# p7 y
{
4 x1 t% }$ S k& ^! P
upp_buffer_b
=i;
0 E. p) t. D/ `) R4 a
upp_buffer_a
= 0xDEAD;
0 N0 T6 J# r2 U$ R
}
1 p: e; C& [: c8 u M& n E
3 G1 W4 A2 R2 r M% h
//for(i=0;i<1024;i++)
# @7 n- S2 R5 A4 n. e) P* a
// temp
=0;
& x4 o9 D+ j+ u; D# ~2 M& K
+ p: B, ?$ h( n1 F& K
//UPPReset();
* j! _) R$ a3 i* L; \7 F b1 q- I- q r
/*启动UPP DMA传输*/
. ?' h( T% O- o
UARTPuts("upp_prog_dma_i\n",-2);
1 U7 j% T4 }" m0 }7 R) N
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ T. ?/ D/ M9 z& W4 ?9 ^3 O$ @! q- U
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 T8 K# L$ t% P9 U& o' S) w- K
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& \$ [9 E2 f7 e% T0 V, G7 m
9 S, {- u4 g T n; W7 U$ f. z
UARTPuts("upp_prog_dma_i\n",-2);
( z. \" E3 g" {- r- C5 {
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 t) S- q* N: `* M4 c+ U" s
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. E- d1 ^& q2 S1 c
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. B' ~! c0 E! t. _
8 L3 D7 t+ y3 g8 V E# S5 }
/*等待UPP传输完毕*/
3 o4 u+ }; h' }5 z) E
//i=0;
1 e N# a# p1 D' l5 \
//j=0;
1 K2 s4 Y3 s& l; S- k" L9 m$ o% @& V# n
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% _0 H* u" ?0 O- H: v2 {! i
{
8 }) h. @; U Z6 }1 V7 ]" Y
/* 测试UPP传输的同时操作普通DDR数据
, d( ]1 k1 v# h" _1 o: l
temp
=i;
7 ^/ [7 _) e2 a) e! x- @) ^% l
i++;
( f/ U$ ?) k o# h
if(i==1024)
" {: t1 D+ x2 o' F/ f- h/ S6 i: R
{
w$ i5 N" F# V
i=0;
6 l y& b( k. r& x$ N
j++;
& V% e8 r( r+ x% P
}
2 Z& p/ _) a8 D
*/
! u1 ~/ B$ D$ q( Q5 @
: w0 {7 k w) A- _1 h4 ]
asm(" nop");
: w$ g# B& D5 l0 T9 Z& ~
7 C5 P1 ]( S. o: V+ V0 }) h
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# m! P2 O# R1 l- L
}
: F$ A+ S4 \1 r9 @+ X. U/ h
6 J- m( _6 l$ }; x" T s _: d
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, b$ S# L7 _+ Q% ]! T# P6 r
//UARTprintf( "i=%d\n",i);
3 p7 P/ @) i8 x4 r
//UARTprintf( "j=%d\n",j);
4 r6 M) W7 Y: ?! l4 A6 m" a8 ~
UARTPuts("Data mismatch in buffers.\n",-2);
, y9 ?/ U$ q5 K, X0 _, R
if (upp_interrupt_count == 2 && upp_error_count == 0)
- s0 [, O* b- K- k# c: l; a: e
{
1 R( p! E G( w. A1 v1 v' k9 \
for (i = 0; i<upp_frame_size; i++)
: ^6 R3 N& w( d% ?. b+ L$ b
{
9 z% b: W# a) P
if (upp_buffer_a
!= upp_buffer_b
)
- o- l4 D s; N5 }' [4 S" S; V
{
) V$ V- p! H O3 s8 g
upp_error_count++;
0 h) v7 a) E- D
}
I1 Y _8 N& o
}
2 S# O K" m; r: v' ]( U
}
7 w* o5 }/ v) ^ R3 C R8 S3 d# b
$ h) P7 ^; d/ ^: L
/* 报告通信结果*/
+ Z, C5 r. ^& ]/ f& H
if(upp_error_count != 0)
* V7 n( D. l+ Z6 {" o q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
V) G u9 e/ H* z
else
) B- ?, M! g8 B( o
UARTPuts("uPP transfers complete!\n",-2);
/ p7 ^) F- g1 V
8 V l7 P& G3 K6 \; f9 X
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; l5 q& j( n% r$ X; n
UARTGets(ch,2);
* Z) O H; a' D' p1 a
UARTPuts("\n", -2);
& q7 t! L% A* J5 Y
# t: _$ P9 Q$ j
if(ch[0] == 'y')
( k$ Z5 m/ c% ~ w; A% \
{
9 A2 C9 D8 ` O8 h" ~
/*打印全部读到的数据*/
6 y. q1 _. F/ Q' W& q
for(i=0; i<upp_frame_size; )
6 @( f# p* ?/ W$ z
{
4 {" |, b1 u9 }6 @ p6 A
for(j=0; j<5; j++)
3 U9 O5 F9 p5 m8 i
{
: l! V1 h- G0 M* G. }8 B% E
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ Y. X$ v/ e" f3 [' y" y
i++;
* i6 t6 O. ?+ j0 U. d2 b
//if(i >= 4096)
. |' {9 q, M3 o, F
// break;
* x [2 P/ z/ n; _* x; e0 f7 U
6 I9 Q, K5 m% H$ j9 j2 A) v4 P
}
t: r$ V& F# h: _, b) }' T' ]
UARTPuts("\n",-2);
# q, h4 X* {& L% C/ \) M
}
. X/ W q/ p; d. u
}
# \7 O7 [: l l8 \" E
1 f" m, E* j, {' g1 _3 p
}
0 J& P0 w! o/ Z+ v* D
. H1 E; d8 h$ c% S
' P( H1 E6 a- |
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ T4 ?9 N. r9 U
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ R8 E1 `9 |0 E9 A
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4