嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
c& ]8 n! k- W: e. |, A
Void UPP_TASK(Void)
" f. t# d4 O4 V6 l, c6 I
{
" j3 Q/ W& y; B& U. `8 F, b
7 @4 G2 U. O+ _$ a5 `& Q
int i,j,k,target_int_count=2;
+ r r3 V& `1 u* M3 `
char ch[2];
* l% H' `1 H8 u( k$ I
, m. y, \, C& _9 [
# q. V& r$ a m8 g0 X
' Y! ?6 O% i! }. V
upp_interrupt_count = 0;
# E W4 r# O* L' X5 i
upp_error_count = 0;
7 F1 l( u; _/ x
3 l5 g$ q" x; x" c3 L5 p
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& a4 p; l: I u/ y
// Initialize data buffers
7 O9 N& \5 T5 ]
for (i = 0; i < upp_frame_size; i++)
' Z8 _' z: a! M' A2 g
{
& q9 J; R5 O; ]! y" _% r* x5 N
upp_buffer_b
=i;
3 c6 N% ^9 L+ N R3 \! V
upp_buffer_a
= 0xDEAD;
6 ~6 U' c- y5 [& L' i$ u9 B2 Y
}
% X4 l8 m- y1 x3 r4 N# `2 D
8 j3 l/ A' y1 M! D* l* E
//for(i=0;i<1024;i++)
, ]- U3 n( z. P2 S+ a" h
// temp
=0;
3 s, Q: T/ f) n
( H9 j' w7 x5 i/ C
//UPPReset();
' \/ m" s# _3 D* R" \+ ^
/*启动UPP DMA传输*/
9 c1 \; ]7 O$ q" ?/ ]
UARTPuts("upp_prog_dma_i\n",-2);
. m+ \. H# y+ e( j, Z+ W. u4 N
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- z( ?/ f" I! N2 P N; o
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; n/ P" e" o% J0 E
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ [; a8 ]7 q8 g! p* c) y7 |. U
: t' n4 {1 G" M; K3 Z
UARTPuts("upp_prog_dma_i\n",-2);
; u! @. j. ], w7 z# G; T
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* r; j8 Q1 r+ W, y
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* g" w' Y; T, W; j4 b2 U8 i# D
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 c6 j' J% w& Z4 N4 @
4 B% Z( g4 G) ~
/*等待UPP传输完毕*/
# m4 D5 w6 P3 M" G% b
//i=0;
3 l! u6 B3 @1 ~$ \. S7 z
//j=0;
$ P; Q g4 v& E3 C5 [7 D d
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 t. G3 Y" n- C. ^* |
{
2 @9 j: u2 p3 a$ ~
/* 测试UPP传输的同时操作普通DDR数据
" o1 v4 e- q2 ^3 a
temp
=i;
7 Z" n* A- V H' O! n' ?5 f
i++;
: A2 x& H) p6 e, ]9 \
if(i==1024)
1 \5 S% R8 E& _2 A9 @& \
{
, Z# Z8 Y& }" L+ z
i=0;
! Y$ N' j- \, b" D6 V5 X
j++;
6 N' j! \" D- h9 _* x. u
}
( v" t3 ~) R, M4 B( K1 P* B
*/
/ ]: @3 E! c5 V5 l) x
$ O6 ]* l3 R/ e8 ~0 k4 t, C
asm(" nop");
) `9 [# T# I; O3 h& g1 |5 E
# }. O8 M; Y. m, ?, Q0 s! {
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' i; |- s1 g ^8 g7 B5 t
}
: ]/ f) W2 \7 r0 e1 E, l" V
2 p) R/ Z4 i* z. u0 |( h
/*检查UPP传输的数据是否正确 (loopback modes only)*/
3 ]1 c0 G7 F) h" _* O8 ~* y
//UARTprintf( "i=%d\n",i);
) ?* O1 ]3 H. X* l5 r
//UARTprintf( "j=%d\n",j);
! o! U* V# U% H( Q3 l* F
UARTPuts("Data mismatch in buffers.\n",-2);
4 }- x' u0 \& i; |0 W# U. O
if (upp_interrupt_count == 2 && upp_error_count == 0)
* U0 `- D. s" N6 V4 c7 f8 n
{
' R1 ^1 G8 `1 A& O/ O, c+ |
for (i = 0; i<upp_frame_size; i++)
3 Z* f0 g$ z% ^' q3 `4 N
{
1 y" i: J8 s; _/ @- q/ y V- B3 W
if (upp_buffer_a
!= upp_buffer_b
)
! k/ r4 J3 f) x2 e) k" P
{
; O: g, ]8 W0 o. _
upp_error_count++;
4 U, W0 ~, H( D+ G% q
}
4 T% {3 Q- v( G" N5 P7 [
}
8 M- m, U5 N) @, G+ d" Y# z
}
3 L- ^ {- V, I! x
. ?0 c( E1 X( X2 B
/* 报告通信结果*/
2 ?$ `, K0 G1 l3 I
if(upp_error_count != 0)
" x) s: S3 T9 h1 o- \4 K. I
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) e6 j; ~$ ]# X
else
" K! G9 @2 B+ J% Y$ L
UARTPuts("uPP transfers complete!\n",-2);
/ |; y. O# Q7 x8 T' L
; z7 x. z& k, Q- O0 [
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 H0 Q6 J2 o2 i. B7 l& c; O
UARTGets(ch,2);
$ y! a7 P! Q* C& a, V
UARTPuts("\n", -2);
& a0 `+ y# @% c i8 F
0 R+ [* y. K; T8 Y5 e D" `
if(ch[0] == 'y')
" p% A) _4 L/ C& y
{
& \) s8 \ Q, Y9 q
/*打印全部读到的数据*/
; Y }5 q- p( w
for(i=0; i<upp_frame_size; )
* X3 M9 t. x: W4 ]" b) m/ N
{
5 L$ i( e Q/ u7 W: ~2 r. K
for(j=0; j<5; j++)
2 ^1 w& |8 D& X1 l5 j/ O
{
C& H3 w& B. E- |3 F1 `+ d
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
8 D& V0 c: T1 T$ S u: |' K
i++;
& ?0 H. D+ `8 N0 j1 A8 v/ b* s0 m
//if(i >= 4096)
2 R2 M) D! P2 C; N, n, G8 A
// break;
9 G+ L' [& J* k1 @! q# d9 Q8 E
( a4 ~: t5 P6 U1 F& e
}
4 K3 D0 Z6 C: K3 c) `
UARTPuts("\n",-2);
. z, ]0 s5 K5 ]& B* n% m5 G
}
: I) b) x! `% ]1 N4 ]8 R7 X
}
+ \: X$ Y0 d0 x9 Z
4 q: u- x7 }/ m$ S+ e
}
! k7 M% W, _9 N4 L Q" `% h7 Z
6 b4 u, H* p! Y0 A
: Y' y) E) v5 \% M7 w! d: a
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 Q: I4 o9 {, ?; w
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) F) j! ~2 b1 Q2 z- }' c
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4