嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 q, g# }& V* i/ {& X+ W
Void UPP_TASK(Void)
& B# M9 h' ^6 B9 U# V: z% Q* a
{
3 z) t9 S5 b3 j( q/ t" b
& k: O: f( G l& J
int i,j,k,target_int_count=2;
- v+ Y3 {, K2 I0 z6 P. i
char ch[2];
0 }1 @+ A- |. e1 G/ p. c3 f
2 U" v/ l$ z4 c
- P6 R+ D; b1 O% @ `
* c! U5 ]/ Q% Z7 U: _: \: x! _
upp_interrupt_count = 0;
; p B$ G; V& Z0 R X
upp_error_count = 0;
' Q0 m8 Q/ B9 d z2 L# f
5 G/ h+ {: j* F6 c; i: B
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# m5 ~3 W2 u n; E2 c: W2 V
// Initialize data buffers
1 K; b* X( h: @* t' V \; `
for (i = 0; i < upp_frame_size; i++)
7 a* u. K* U1 Z: C, h
{
3 {, g" j8 l9 N+ x. O1 V
upp_buffer_b
=i;
, `: q* h9 [7 W
upp_buffer_a
= 0xDEAD;
% D8 `( B# J$ R& {
}
7 D9 X W Z6 b. Z3 @
) [# A( c4 G8 k
//for(i=0;i<1024;i++)
; @9 t2 m1 Z. c* C: o
// temp
=0;
' M) S# |7 Y4 D
$ d" {* k# S% K8 w, Y4 r
//UPPReset();
7 F: q# S0 |. u& M0 G
/*启动UPP DMA传输*/
/ O2 F& s) A0 S+ ?" x1 H9 ?
UARTPuts("upp_prog_dma_i\n",-2);
: k" A, e* i% N8 _
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* j4 K3 r& g/ C" {
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% K1 e. y) L1 [# N8 Z) u
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& e( c1 ^9 e' n6 \! B& e
- d/ O1 \. Q( D
UARTPuts("upp_prog_dma_i\n",-2);
: {$ k5 _; I6 n: W/ }- v
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) O% V# t) D8 ^% k5 X5 `7 L9 O* A
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 O' D% f5 O5 P/ a
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% U0 r5 K0 C' w" _& E$ f) P
- Z* m5 P1 G& P# u
/*等待UPP传输完毕*/
* y3 Y+ _% r* b- @2 ~
//i=0;
; \/ U0 n& e' u$ C/ d9 t: H
//j=0;
+ o5 o/ ^7 g U2 Z0 ?8 u9 {
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 S$ [2 m* z$ `$ s
{
/ q% f0 g" Y, F& j* ?) y
/* 测试UPP传输的同时操作普通DDR数据
- k$ h7 Z% Q2 {% F. ?' Z( }
temp
=i;
+ c' \/ E; e/ p
i++;
1 Q" i/ ~) T3 i. x" v; V
if(i==1024)
+ p# s. Z4 U" y! c$ F
{
& c5 ], E1 K# H, L, y1 i
i=0;
0 {2 m' c5 J& @3 Z9 B3 z
j++;
* k7 ?; K& w1 K
}
# B7 c Z) u. x% P
*/
8 Z1 I% V% b, ?/ V4 [- L
3 p/ b2 ^6 z1 Y1 S5 U. X5 S
asm(" nop");
: k+ ^% F J1 y# G6 `$ j3 [. {
2 s' T) J0 a9 f6 Q
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, K+ Q$ `3 u" i& H/ Z% a+ G7 c
}
0 r7 o" L0 R. @( N2 V9 X
# A5 ~2 x6 P' L; _* I7 A0 B6 |
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& S) p8 B/ k# `
//UARTprintf( "i=%d\n",i);
5 _* _' M1 s Q5 V- K L, k/ c
//UARTprintf( "j=%d\n",j);
) N d7 `$ f; T( [" k' X
UARTPuts("Data mismatch in buffers.\n",-2);
1 G5 g8 M( L! g1 U3 T/ Z
if (upp_interrupt_count == 2 && upp_error_count == 0)
) ^2 J% t" S6 R ]* B7 J3 z
{
8 a8 I, e* `+ ? z
for (i = 0; i<upp_frame_size; i++)
' b8 x- ^/ h& U8 u# P
{
: t* u I @2 G ?7 u6 b0 ^
if (upp_buffer_a
!= upp_buffer_b
)
- T4 u2 d% U# V$ K! y' T
{
7 e1 V: f& i! P- T0 K% }
upp_error_count++;
. w+ [6 Q2 w' L7 u3 ~
}
2 E7 f' u$ y' f9 l
}
5 b7 J+ U% B( ]$ p" K
}
: o2 E$ b- C2 \' f
- K% }3 R* |& R( \3 T
/* 报告通信结果*/
& z! m/ {/ ]. i$ D
if(upp_error_count != 0)
6 j; e5 @% p- ?% J! \8 O1 ~
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. g" a- q3 |9 x: l
else
) g) b; v1 ]! h9 b% }9 Q* C
UARTPuts("uPP transfers complete!\n",-2);
! X& h q5 H I# g8 N+ P4 F
: S7 P0 ]8 Z# {( u" L: x* v( z
UARTPuts("Do you want to print all the data?(y/n) ",-2);
" H+ q! z) T% Q7 k# V) [: m) W% s/ ` k
UARTGets(ch,2);
- b& h, G& @2 v) l2 F
UARTPuts("\n", -2);
% {% [! v1 S! r; V4 I( H! @: G2 E
3 z4 Y$ n9 {( t5 t& K. }
if(ch[0] == 'y')
% Y7 x0 V) e4 v# f5 K$ w' A4 O
{
5 F0 \5 T1 Z/ {" X- |; _3 p
/*打印全部读到的数据*/
% S- ^6 ]% s. u- Q
for(i=0; i<upp_frame_size; )
+ Z( A- a! b0 r' P0 F$ _+ r- g; _
{
1 a( P8 Z/ p9 O8 a2 e5 j( T
for(j=0; j<5; j++)
2 U# m7 @- T5 D* \( \
{
! d- u1 h- @' H4 ~1 q
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 M4 ~5 `3 p- o0 ^: P4 G# ` p
i++;
/ d# L0 [& J u% ?6 s: M6 m+ U
//if(i >= 4096)
; S1 F! N$ f9 S
// break;
- h+ E. Q3 ^0 r2 Q
/ y5 T8 z7 |( G& H0 P" C
}
' |6 t) j" R" j }# ^2 z% M6 ]
UARTPuts("\n",-2);
4 }$ n- l$ q0 B# j: a
}
( z; F2 G! v; \9 a
}
$ |& J$ i9 W$ K7 W6 b: ^
+ c! C- n4 E6 d" t
}
: c6 S; D9 B1 s+ u
6 ^; } r, }& }; x( n+ A
* y+ ?8 ~. u2 T/ J) u3 w1 x# Y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. e( S$ K8 ?& k3 T2 G
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' x/ n5 o1 Q0 _! Y: a0 X
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4