嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ |& u \7 t; L3 \) f- k0 j
Void UPP_TASK(Void)
% ? y* _8 E3 i$ w {
{
$ Y' P4 t; l7 N
9 g) s+ ^6 x5 C) x, p2 n
int i,j,k,target_int_count=2;
! d- `) j4 e. f& J
char ch[2];
/ ` d4 @+ R) a" E# d0 ^( Q7 Z, _
0 N7 Q$ j7 x7 g
1 w' e+ f5 I2 Y. [- f
# c$ T' |: f1 h# ~) v5 z/ l7 E
upp_interrupt_count = 0;
6 }0 R4 f4 s. c% g2 i8 o/ _
upp_error_count = 0;
+ G5 k5 V! f& u8 a
4 B# J7 a- o: e1 {) G* m/ X) I
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. k! x5 `9 V) L
// Initialize data buffers
0 G! i; g1 m) s/ ^
for (i = 0; i < upp_frame_size; i++)
/ w W E* {* _
{
( S9 ?; O+ b& X: |# U+ B
upp_buffer_b
=i;
& ^9 L9 G+ Z9 n }# t0 {
upp_buffer_a
= 0xDEAD;
) @ M! ?9 f! Q+ E3 M
}
1 d" I- V$ j$ Q* Q2 G
( Y0 K8 R, u* A8 X
//for(i=0;i<1024;i++)
3 X4 b1 t: s6 O" ?, A( E& n+ p
// temp
=0;
3 _' V' r# _% n7 {/ M
6 @- `; t, f! n0 o0 E7 k- G4 k
//UPPReset();
& D1 T7 V+ z5 |: }0 r
/*启动UPP DMA传输*/
2 B% t, f$ M0 L" M4 X- ~
UARTPuts("upp_prog_dma_i\n",-2);
O4 [3 D* i. g) {1 M1 v
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 A3 D3 n9 K. P4 M# S
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 H7 }! }: Y7 x2 l5 Q2 ?9 D% t8 d
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ \+ s/ B- E6 u' d4 n$ J7 e
6 @ G A/ ~! I) w
UARTPuts("upp_prog_dma_i\n",-2);
0 f4 ]+ Q& j! W% Y! N. D+ g+ J
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 j, u9 {% `: J" ~% e; k$ g
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ v3 N8 |4 o: ?" m" N& s( W5 I
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) O9 s6 A6 A, F: ^
! f5 h6 e. X) j% j1 L, y
/*等待UPP传输完毕*/
7 A' D5 W& a3 h$ u5 M7 v( \
//i=0;
5 t* B; p- T6 `3 _$ A1 V7 H
//j=0;
3 q5 _/ X1 Z7 [0 e' \7 y& N: i1 K
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 X" e9 a& D) e+ V6 ?/ L. M
{
# x$ H- i* K5 _' }
/* 测试UPP传输的同时操作普通DDR数据
% i" g/ ~1 N& _5 F
temp
=i;
+ e( m% ^) N) |- l' \1 M
i++;
; r2 o0 M9 {4 V+ Y
if(i==1024)
! X1 X6 [# z8 ? T0 e0 X6 ^5 ]
{
# \- g. g+ R* v/ C' G
i=0;
3 h4 b5 g' r. F3 a% y+ @
j++;
l- a( v8 z3 @9 D5 ?
}
: M7 r+ l5 T. k
*/
' Y% @) e- g' c" s) L
% [6 |' Z& O- w. M
asm(" nop");
% |/ ]/ O0 o2 `' z( ]# T3 S( H
4 ~7 l, y2 L# K3 I, K) S0 y7 ~8 T. ~
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 s2 k9 F2 ^+ X5 l: m; b
}
! s! h$ b7 Z8 x% f$ a! R7 W
% x2 [+ m4 j$ \+ Y4 y* w' C) ~3 M
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% {( G# m" J4 E4 x F
//UARTprintf( "i=%d\n",i);
6 {* A) V) k3 K& o
//UARTprintf( "j=%d\n",j);
7 E* A' e" n& C( o4 T Z' ?* X
UARTPuts("Data mismatch in buffers.\n",-2);
1 `1 e) k) p4 T% q) [6 @$ ^. F
if (upp_interrupt_count == 2 && upp_error_count == 0)
2 l* d2 {0 ?9 i" G- ]' E
{
3 W, b! n) a: x# J5 }% R p
for (i = 0; i<upp_frame_size; i++)
6 @6 P8 E% N2 B: H0 `
{
# J0 e5 ] z2 a0 R: m/ U
if (upp_buffer_a
!= upp_buffer_b
)
' P" i# J6 }) P: A, F0 C
{
% L& b/ q k3 D
upp_error_count++;
8 [# O$ l& @! x! ^; D& B7 D S
}
+ A: z' c* ]9 g4 l
}
' I6 } C; y* J. F) t
}
* R; S a3 f, i. e5 _* t) B
5 w$ e; W# X7 }
/* 报告通信结果*/
8 @2 T* T1 d2 A; M& ^, ]* g5 O
if(upp_error_count != 0)
~1 J; n6 W) q0 ~3 C5 F
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 N: _* F0 M5 q3 t4 p
else
( F; k5 x/ W% d3 W* N8 F4 t0 R" w
UARTPuts("uPP transfers complete!\n",-2);
+ y: J' f2 X; C+ t0 O
) `; E( K4 a. ^2 q& Q7 R6 V+ T% N/ l
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: ~; c, z. i6 W
UARTGets(ch,2);
' ~4 T: }8 m8 d" x% A7 o A7 S
UARTPuts("\n", -2);
' A& q- b3 Y% @0 f+ [$ _; i
: ^8 Z% [6 H# o: z
if(ch[0] == 'y')
: g1 Z& |) C% ]- S5 P
{
" G( L# I; C& H1 _6 ^
/*打印全部读到的数据*/
3 I6 @- z% M2 B2 n1 g$ _! s
for(i=0; i<upp_frame_size; )
" {. C# \: O; @, ?
{
4 q4 E& A, H, G/ P9 k, h5 u
for(j=0; j<5; j++)
, ]. S4 a {% u& T6 H" k+ n
{
* B9 U. Z( _9 ?! L B; }& j! g- T2 X' B
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ c, a/ l" F0 @2 {; P, G
i++;
8 o7 J/ ?1 B1 Y
//if(i >= 4096)
2 {( k1 c3 c) j- p6 L( R) c/ l( r
// break;
! \9 P6 S, r5 [' b) s3 o
$ x/ g9 o9 u" N% R
}
1 i1 x+ P$ f/ I! y% b, n
UARTPuts("\n",-2);
' u! u% }( N6 Q4 i! }
}
7 r: k' n9 F& e( C1 A
}
$ \1 `6 H& b% e/ d# ~6 w2 j7 @
; E/ \4 @& O' }; Q9 |- k* A
}
( h" }! o- d& X4 @
4 M& V4 h/ W: r$ [) k
4 U: u% Z7 R$ z: Y+ [6 R
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ W' f( A4 }" F% h
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; ~# H' t- k: U/ N
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4