嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# ~9 U- T; g2 }" @8 m- E: E
Void UPP_TASK(Void)
* c, W! ~' t/ L4 T6 U
{
' F. |, O( a7 _8 ?7 w7 u& Y0 _) `
; S! ^- x) e/ q/ J5 j9 a1 T
int i,j,k,target_int_count=2;
: U% s; e) S/ D! W- U# I/ e
char ch[2];
) P: g2 Y/ d" t
3 j! O' ?6 D; i2 d" P2 j* v
* x8 a' @* x# C* `4 x" b% W1 a1 W
, \7 s; M8 u) f) w
upp_interrupt_count = 0;
# `; Z5 M8 m: B8 h* i6 o, }
upp_error_count = 0;
1 ~0 g8 g" z3 L6 p9 C: A0 v
. O& J' W) `; \) l ~
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 `8 q- {8 O& d2 ^( u. k; F/ z# @; ?* E
// Initialize data buffers
* x7 X0 ^7 ?1 ?* w2 t! ~; Q
for (i = 0; i < upp_frame_size; i++)
. D7 O. A( N7 g) _2 }& v$ s% C6 K3 p$ K
{
9 s0 |- y& z& N' b& _
upp_buffer_b
=i;
+ ^/ w# ^+ f n: U
upp_buffer_a
= 0xDEAD;
: n9 B7 ~* O6 u
}
. M5 e; g$ C4 u
* d+ b1 U2 F. u& N
//for(i=0;i<1024;i++)
" [& F% n% j+ ^) s3 G! Z
// temp
=0;
$ m5 z) z9 p6 v* h2 z, y
0 A& g8 e% h+ H. {: Y
//UPPReset();
$ u0 {3 D8 P1 c# n" U) V q: g, j
/*启动UPP DMA传输*/
/ j5 v- e7 v. H. `; q+ b
UARTPuts("upp_prog_dma_i\n",-2);
% [6 J+ g; ^! g. z' T
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( |& Q, i% V& v# r! M! A
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' w5 @# q: o, Z0 N( m6 C2 n2 r
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 w& d* I: H. c6 T! w! L( m4 _: L
6 p, V# ]) J; D1 j
UARTPuts("upp_prog_dma_i\n",-2);
; p: K/ U" v: E! M. W+ V* E
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 c. Z/ N5 R' ?* L& a
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- X% V0 ?: j6 s7 F' T7 w
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" v. J- j' ?& C8 U
% S2 g0 O5 h& E0 h" Q
/*等待UPP传输完毕*/
0 _: }$ E+ F7 {2 _+ M1 v _
//i=0;
! f( F* ]/ @% R, Y
//j=0;
. M; a4 y3 K0 J( T$ C. j$ L4 w
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 h( m7 |' o1 ]( w: F' P
{
1 q. t" K: ^+ {2 }+ B/ c( ~+ B
/* 测试UPP传输的同时操作普通DDR数据
2 a) q2 v+ T/ @5 L
temp
=i;
2 v$ t$ l* x# G6 i( K0 a m: c" M& l
i++;
3 F+ X4 y0 b" ^, @
if(i==1024)
$ A/ D8 \( @( M( b
{
8 n: ], L5 q V0 c, A
i=0;
7 E" t- ^$ u/ `
j++;
& X4 r8 i* t8 K. D" o
}
0 R0 n9 X8 |- i+ _& u
*/
' j' W$ u* z) S! N: V
3 {5 R; q5 d. ^3 Y: n
asm(" nop");
, B G& X: s8 i0 v5 C( L4 ~% a
& ^* D# C' ~5 U
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 I6 K3 z9 j6 l2 C% i$ p
}
. G8 j, y' O& W3 l
' w, [6 b. ]* y; k0 P1 K
/*检查UPP传输的数据是否正确 (loopback modes only)*/
6 J- B" K9 e2 h0 F8 q
//UARTprintf( "i=%d\n",i);
8 h7 k! @+ a$ s, x3 ^
//UARTprintf( "j=%d\n",j);
H* O P5 a- n. o2 R u$ c7 b2 S
UARTPuts("Data mismatch in buffers.\n",-2);
) r& O/ ^- t0 x7 g+ x8 y% Y! \
if (upp_interrupt_count == 2 && upp_error_count == 0)
* M: O' g2 T7 V& f. I! a3 f
{
( Z2 E4 I W2 U p9 J" i/ A
for (i = 0; i<upp_frame_size; i++)
! _, U, j+ H6 B; {
{
, p y1 [! g/ l3 t- m: T( b
if (upp_buffer_a
!= upp_buffer_b
)
! q3 C$ l6 M6 I8 z+ r8 q: J: [. }
{
6 C# ]$ F6 {9 E0 q* E. F% q5 S1 y
upp_error_count++;
1 g0 O8 o* L) X7 x4 q W
}
/ T; W2 Q( [% z% b! n
}
* \6 S1 R7 p8 Y$ W
}
9 b$ C; j- y+ ?% s7 E. y
. }& X6 U+ O' E
/* 报告通信结果*/
0 i- \. N; j* C! O4 M \
if(upp_error_count != 0)
: Y% D* N: k8 k' K% \" h
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 _/ [% f/ g( L3 O7 G
else
, q( a) p0 `1 j
UARTPuts("uPP transfers complete!\n",-2);
) z0 U/ b0 Q; e( N2 X* V0 @# u, ^
f- Z9 `9 `( l+ ^3 Q2 [% ?" f
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 W: q/ I3 U, @5 V& x0 {, T
UARTGets(ch,2);
' o( S, X8 c" l, v+ P
UARTPuts("\n", -2);
S5 B# U- w3 K! [
) V5 J, ?5 P7 F
if(ch[0] == 'y')
& `' K4 D' G* B/ X
{
5 S" a+ R/ E4 M7 ?( N
/*打印全部读到的数据*/
% Y3 V: W) P7 B
for(i=0; i<upp_frame_size; )
# T) v) u) _6 |4 C. A0 \. K( p2 S
{
( t _9 l$ c! p+ v- G4 X) y" j
for(j=0; j<5; j++)
; ~0 k2 @; a& p. i% j
{
7 M; Y& a+ n5 [, P$ {4 U
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 ]* W* j; h8 F3 d3 E/ X* |
i++;
% _ g1 p1 w) j: G9 r& a$ ]& Q* ~7 I& u
//if(i >= 4096)
2 f5 v+ \4 r# Q5 \6 Z
// break;
' C/ v7 p4 |$ G/ S
2 D. v1 @- M: B% h# a
}
$ K8 M) }7 r, [( f$ k* t
UARTPuts("\n",-2);
- y L, ]. x+ S' p2 W6 V- A
}
) s) b+ s; e% b, |2 J1 W
}
) k9 [3 O7 c8 ?% m
/ G7 N4 y3 B# B* J* W
}
# V: f1 T2 g1 D1 |' _* K1 O+ _
1 l% R9 D" s1 W# e
- q/ r7 g& z* n
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 |9 j, b* f N) |
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 B7 u. M2 q' E$ R% O; Q/ E0 x1 z& m
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4