嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ t& u3 `& a/ Y0 u7 z0 Q4 d
Void UPP_TASK(Void)
8 Z( F8 i- p& V; d
{
8 Q0 s& N# r2 E2 M; _% a
+ B+ b5 d) Q+ t' @% L4 p* K
int i,j,k,target_int_count=2;
4 Z5 n. \' Y/ u# T
char ch[2];
* T* I3 A) m2 o0 `2 W/ Y
4 f2 r: J1 G: q
- W( \8 t2 d& D3 x
/ A; N" N+ J8 r
upp_interrupt_count = 0;
8 J! K# ?7 O0 W8 R
upp_error_count = 0;
! p$ e; b. p# F; i' w; s
4 h- B5 {: q! B' w- k0 r
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- ^+ ]& ?0 A2 ?
// Initialize data buffers
9 B1 Q8 w- W% i% a
for (i = 0; i < upp_frame_size; i++)
1 j, r; c$ }6 J2 m# t: F! d/ W T
{
7 \6 X' A, R# C+ D% D' S
upp_buffer_b
=i;
& U# j1 m9 O: E8 d4 _
upp_buffer_a
= 0xDEAD;
4 l/ f1 l0 G$ @7 y' f& ?8 i
}
~3 A( T& v! O/ _2 w4 O, q
1 ?/ v @- S9 T& |* H7 e
//for(i=0;i<1024;i++)
' o: a7 V" Z S- z# f2 z
// temp
=0;
' Q3 R$ d; t5 N+ U
" i) `2 @% z( Y6 o, W; c
//UPPReset();
6 y0 V1 r2 E k5 M( [! e( o
/*启动UPP DMA传输*/
$ g. w) j; k( k
UARTPuts("upp_prog_dma_i\n",-2);
1 ]" w# ?* N; \) a6 z, W+ m& n
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 ] X _% G9 _2 [3 ^
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ f: ~$ C2 X1 U1 u! H+ ^. S# T
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 u# R% J) ]' g$ l8 Z+ R
4 s- K( @6 w- H, Z& h
UARTPuts("upp_prog_dma_i\n",-2);
6 T: c$ M, G/ e3 w5 Y6 O' o
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 F% m# M! e7 A% s/ w4 B4 a0 j
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 K+ T3 T' I( _
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: Y$ h( m9 D4 J+ Z
2 s% y: a3 x' M! Q& Q
/*等待UPP传输完毕*/
% r+ o/ Y; a7 R* f+ I) d/ v6 s/ `
//i=0;
4 y1 E" l1 s! b5 p+ p( B
//j=0;
/ x% y2 r6 T- |& t8 z2 f
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 R2 K( T5 ]; T7 y* j
{
5 b& m5 z5 ^ l# {1 a
/* 测试UPP传输的同时操作普通DDR数据
& f. m' B7 d2 C5 s; M/ M
temp
=i;
) ^* a1 N. z! i( z4 p, a3 p
i++;
2 x3 d8 G! o z' Y' d
if(i==1024)
+ {$ L. z. a% M& @
{
2 O2 {; K4 f& k
i=0;
" W, h7 B' `/ J7 k Y! E
j++;
. y: L, @4 a; |
}
: J! G. j5 q0 }
*/
, W: F; s4 R |( F( ~; E
4 e$ h1 G, g C, |0 Y) W
asm(" nop");
* X& D7 C1 S. @* U0 x* e3 \
8 Y/ h* w& F& |& s0 p/ F3 X
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& z( f( L. V/ B
}
! K) ^7 r& j* t7 T4 F8 ~
: F7 c, e' `! z+ ]
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 u9 \0 W8 \1 o5 h- |
//UARTprintf( "i=%d\n",i);
, `& ?1 N" _$ F$ r
//UARTprintf( "j=%d\n",j);
7 w H& l& E, o% a' Q
UARTPuts("Data mismatch in buffers.\n",-2);
; A! C6 V8 H- g# \6 ?
if (upp_interrupt_count == 2 && upp_error_count == 0)
( D ~5 X% q1 x4 w: x
{
0 m: S( f* @$ M. B3 g2 o
for (i = 0; i<upp_frame_size; i++)
0 T1 S: R% L% H5 C9 @, n( I
{
8 }- l/ P% r. q1 o
if (upp_buffer_a
!= upp_buffer_b
)
4 [# K# k+ i; y+ m/ ~+ t7 F7 U
{
( m2 h$ j Q+ Y+ P7 L( u+ x
upp_error_count++;
( t; u6 H) ?8 K" O
}
5 f9 O* x: s, B$ g$ a9 V2 u- d
}
. {5 C& }: e+ P% ^' h2 h) d
}
5 w$ H) D/ j% ` R! G `7 D
# n7 h6 p `1 j, t9 p8 P, J2 `
/* 报告通信结果*/
+ _9 \7 G! h$ [2 u
if(upp_error_count != 0)
9 z# T6 x: h4 b' r$ R9 K
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( p6 B0 F; {. I
else
5 C$ d6 T( N0 o* }# M
UARTPuts("uPP transfers complete!\n",-2);
# V9 @- ~2 F2 g+ h. i2 |; ^: E: C) b
1 Q9 d6 {( U; t4 a) v3 |' E
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 O6 t3 l0 f* w5 Q. S2 }" }
UARTGets(ch,2);
6 V5 D: f1 @) M2 m1 O& x
UARTPuts("\n", -2);
( n0 f; f( y& y, B
B- f ~1 }$ f3 Z4 x. p& u
if(ch[0] == 'y')
3 Q& Y, X% f5 l, S2 q) n! ~
{
- ^/ ]8 i3 t7 J; ?
/*打印全部读到的数据*/
7 P& T8 d0 v A8 L& d& q5 h6 D
for(i=0; i<upp_frame_size; )
" A# D) z" p/ `' A% Q" M; h
{
f1 @4 q4 j1 D5 W
for(j=0; j<5; j++)
& z# w' R/ \- I7 ^) D
{
7 @7 [/ W# S9 {) E6 O2 j1 @0 l+ Q, m
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; k6 G- D+ @+ D
i++;
4 f( Z G0 e, ~7 V7 g4 m5 P
//if(i >= 4096)
0 n7 o% h; `) Q/ V% v9 {
// break;
+ x: T4 f; [' l. M
s: x3 y% j0 W9 U6 ^# K G
}
) j5 y4 g* b: {
UARTPuts("\n",-2);
1 p9 p' o, ~8 B# I
}
5 e1 e4 @) \ |0 c" u
}
) ?3 U' W; r6 F. ]. `' x
6 x+ E7 d2 P) i# Q- a* U
}
4 Q: w' U, m$ X4 c x" I* a
7 d% r: ~; ~8 V, d9 @) e
$ O! S. n4 y( b. X1 Q/ B
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ l+ X/ k8 X% C/ m, Z9 S- G [3 i
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 N$ B& K# M7 w7 A3 q- ]9 J
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4