嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* v! b' z& D+ o! `7 D
Void UPP_TASK(Void)
: i8 ]1 t* o1 V9 w& u: D% R9 Q. b
{
7 F/ Z% H8 m q. l& F, Q4 A8 x# Y
0 V7 _- f5 P$ d, e4 p
int i,j,k,target_int_count=2;
$ B b& v y) X- p
char ch[2];
% g% P5 O! O" w* x
' K# W& P1 \; ]6 F' e; T
5 H8 `: V% s+ m$ X3 f2 g5 ]
: t* V: |1 k6 r) ]9 V0 I7 w# l# J
upp_interrupt_count = 0;
6 f8 w, ?6 Y& x7 U
upp_error_count = 0;
( C3 i0 q4 b5 S( w
. h# } B" M9 {$ i3 W! C+ Q8 j9 W
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 Y3 k5 o2 b: p q. D) ^
// Initialize data buffers
& }6 m3 L/ ^( u- E: |# J$ v
for (i = 0; i < upp_frame_size; i++)
6 c# g, n# r5 E# ]+ h6 g* q
{
' C% C& V& j& q# ^6 O! p- s! n5 {
upp_buffer_b
=i;
5 K9 h/ y$ v: I/ S4 A. W" P
upp_buffer_a
= 0xDEAD;
8 Y: ~) _2 y# l+ a1 {& V& v
}
" h2 d1 o* y& D$ X9 E
: ?4 N& E& \* h7 U4 U1 r1 u s9 ] _
//for(i=0;i<1024;i++)
4 O0 `# m {6 Y S7 Z+ |) I, N$ g
// temp
=0;
& y) |( W8 ~/ ]3 _, y% o$ q
; k+ D- o; |" U$ G, u+ `
//UPPReset();
6 \" H6 J+ q4 c/ X, q9 r
/*启动UPP DMA传输*/
$ I5 y. A% o! V1 J9 F: a
UARTPuts("upp_prog_dma_i\n",-2);
, w g" z, E7 |2 p" V
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. T# n; a! V) H M y4 S# V8 ?8 n. i9 K
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
{* _" D" f! N- f: z) I! [
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 Z/ R6 K; s) d( r2 K2 w
5 a7 }. h/ y) a2 n9 a2 w0 i
UARTPuts("upp_prog_dma_i\n",-2);
& L7 l5 G# m2 B
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 O5 c) c" d# p( N W! O
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; \1 S4 m" K" B2 D
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
n! V% r" |) _9 i8 ~
8 \- B& t5 X9 [0 e$ P2 P" F5 a
/*等待UPP传输完毕*/
1 t) s7 K% J. F$ M8 Z' N
//i=0;
' Y) J: M+ n, Z9 v: G
//j=0;
4 [6 n: E1 G+ M- J
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) ^$ k7 B( v t. ? `4 b. ~. Y
{
# R7 }$ d6 Q7 F3 C N5 N
/* 测试UPP传输的同时操作普通DDR数据
$ G# f; G8 _8 w, p$ M: V0 O
temp
=i;
& q' n' u6 W; ^. g8 y' k
i++;
% T9 J3 {: n! \, n: ]4 I
if(i==1024)
& w9 M! i( c& u* L% D) I v
{
2 g3 L% T5 k* _
i=0;
3 P4 ~- l& g C# C
j++;
- |% c& h* h% i
}
* y& Y4 [) q# B b& m4 w& y6 J" m
*/
# x! R+ L+ u& M5 W% ~
# k1 p" Y3 k! E9 r9 O- N- l x' K& W4 _
asm(" nop");
/ J0 c$ \4 Z! a. u2 a
5 P" H7 ~. o5 E
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 V/ p7 g& K3 G0 P
}
, J1 m8 L& I* |8 _% \0 }
. N2 L1 ^. ?/ k2 @) I
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 x4 f: V3 Z" m. w: R
//UARTprintf( "i=%d\n",i);
1 J: J' |# ]( V O' @: }
//UARTprintf( "j=%d\n",j);
: K' j9 k5 F3 v; K
UARTPuts("Data mismatch in buffers.\n",-2);
# ~1 d1 M! F# ]) F& K( F
if (upp_interrupt_count == 2 && upp_error_count == 0)
& B8 C6 d ^% Y: N2 D% j
{
6 o4 u: m, s% i7 [
for (i = 0; i<upp_frame_size; i++)
4 k2 N% j8 l) {, \4 Q2 {. k
{
1 p9 U! o. u! N2 s: f4 B# a
if (upp_buffer_a
!= upp_buffer_b
)
" D! `# p" Q8 `4 p1 ^% f7 G. [
{
( k( M9 H [: x4 V* F! H A& t
upp_error_count++;
1 k# m" }" j9 p6 V
}
2 A! O. Q( ^# n, O( m8 c% v
}
: c( T. U6 k$ G" T6 x
}
% N/ ~3 W, C' _" }
9 L1 d: x0 ]# y- y7 `
/* 报告通信结果*/
! w1 W% s9 W+ p! o. |5 x
if(upp_error_count != 0)
$ d1 @* }1 l' m6 j& F4 I2 @
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; z5 I. t# A; B8 B
else
+ k4 } _; k- s; W# X `( A
UARTPuts("uPP transfers complete!\n",-2);
/ I7 o- y1 n) r' q$ n) f+ v
4 L' K/ O: m5 l& G: v
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' f/ D0 y6 \ D7 H- L
UARTGets(ch,2);
( M' d Q( s0 f- T: y! j
UARTPuts("\n", -2);
/ M# k- e* G# j1 n- A- a- U
8 ?. j+ ^! e& m5 r) ^+ [
if(ch[0] == 'y')
" F1 L2 \0 C, d/ E" X& R' Z
{
1 }/ E- B. R# N- B" Y
/*打印全部读到的数据*/
5 V$ k- ~9 m+ ~% T0 u' p' {1 j4 X
for(i=0; i<upp_frame_size; )
o4 L' D2 P# v+ Q
{
K0 ~, A0 ]+ V
for(j=0; j<5; j++)
: |9 }3 Z) l* L6 g
{
/ m! R" F( @% b7 N' _
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- s' y. C% S# G8 ~9 ?, E+ R
i++;
1 Q2 C9 x% g2 H/ U; D
//if(i >= 4096)
! S' _; _; P% I# _/ V# n) J4 Z2 p& R9 l
// break;
5 d) F! X2 ?1 ?/ s
: @2 `! w6 ?6 `- `
}
5 v1 u6 R. ~. n; i. X3 c5 B
UARTPuts("\n",-2);
- ?+ w+ n( F; b7 ^* ^
}
t: U" o* P1 {: I) }
}
% n" ^4 B& T V* ?' T8 G
7 s; X6 Y& [& f9 C
}
e! J6 R2 ~8 I
$ d$ V5 j+ r7 ]3 A3 P
) F& e1 ^1 n+ L+ f, D# H/ y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( s( Y. F& C$ ]. a$ L
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) R- n# t; K5 \5 d6 h) w
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4