嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! P: Z& V5 A+ J" z9 V3 z# s% J) e
Void UPP_TASK(Void)
R" I1 g% ~3 @9 w; Y! g2 l
{
' z2 y! t3 m$ T. Y- { _
, b+ {7 w0 V9 h$ y( L0 }
int i,j,k,target_int_count=2;
1 f+ X+ |* s0 O2 x& `: F
char ch[2];
" |. W; s1 P8 |1 g2 B0 J/ D8 ?$ |
$ @6 r. R: c }
: D h- O7 k! Y+ L
3 g( n+ S' i6 a* L+ }% t6 j* ~
upp_interrupt_count = 0;
1 F9 |. i% q4 v1 P/ V
upp_error_count = 0;
# [% |9 m: z: U5 \8 W
6 s! [5 D4 V% Y4 t5 H7 Z3 z& Y, p
UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 C, H) Y" @2 f% S# C
// Initialize data buffers
% c+ C, i0 ~5 o2 w) \: L V w
for (i = 0; i < upp_frame_size; i++)
8 T. O& h6 `( y6 E! `. t3 d
{
1 G. Z3 E/ T+ U3 H% f, D( B: y
upp_buffer_b
=i;
" E9 [: u3 k, X) J T# Y5 X- A
upp_buffer_a
= 0xDEAD;
( k( N! t: u6 k7 _
}
* {+ m$ k+ C& Z% X: ]6 \8 q' z
+ `. c/ L+ X R! T6 |# B; u- Z
//for(i=0;i<1024;i++)
0 j) u0 a; q; T4 N
// temp
=0;
0 l, L$ n2 ?+ c' n! v- Q
2 Y/ b% [& R6 ^1 {
//UPPReset();
& P$ l1 { \" k
/*启动UPP DMA传输*/
- z4 p5 E/ s6 @- d& S; ?: Y% o3 O
UARTPuts("upp_prog_dma_i\n",-2);
9 s9 Y$ _& J" f, I
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 z' Z6 a% E$ m0 L0 d% B2 o
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 a- ?% _6 d" C- |
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. r, D7 {8 p+ C' s+ d& Y6 a) A7 f
1 j! s: N) h. ?
UARTPuts("upp_prog_dma_i\n",-2);
! {* z0 D; R W' v
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 {3 M$ m5 c' g! p* @) B N
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 k" W8 z2 K8 [
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; x S, \% u/ a) D' z+ s2 z X% Y
4 o' c6 G; v7 [+ r# t
/*等待UPP传输完毕*/
/ }9 y0 z+ @. N' [/ L5 |3 R
//i=0;
, P3 c' R& x/ J6 X% p+ z& m D% W
//j=0;
5 T4 x+ e' l S3 {
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 T, ^$ B- R3 ^
{
9 T! r1 T6 H1 @- Q1 ^/ T. V8 x
/* 测试UPP传输的同时操作普通DDR数据
) |4 ^# k( W/ w' y; r
temp
=i;
! X. o$ y! H7 n M+ H
i++;
$ G4 k' o* b# L
if(i==1024)
0 E. x8 }" M1 c! U6 K
{
" M; S' i. e0 @* H2 B+ k8 X4 s$ y) E
i=0;
& ]7 f1 D9 h1 C- L4 k6 w
j++;
7 P/ H! o( P; W) R& ?$ Q' A
}
; B- B, s% F" `& i
*/
* m0 T0 E c) {5 g0 s# N
* B3 S, ?/ f3 ] |4 R4 L$ k/ N! G
asm(" nop");
$ H. @* c% s I# G; Z
* p _+ N1 Q" G( s: }
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 s4 G9 ]6 z2 h: V+ @7 O4 r
}
: r7 z6 z/ o0 p
9 a d2 w; q/ n8 G, |6 t4 l
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* p2 r0 ~$ j; _& J$ D
//UARTprintf( "i=%d\n",i);
( m+ j$ H6 \, j0 j: Y |
//UARTprintf( "j=%d\n",j);
6 C+ v% V/ P) |
UARTPuts("Data mismatch in buffers.\n",-2);
6 w% q: g& x0 [% H* O9 W
if (upp_interrupt_count == 2 && upp_error_count == 0)
2 k! X- D( b9 ?6 D
{
; ^' Q$ x- q: I3 T9 O
for (i = 0; i<upp_frame_size; i++)
; S9 n q5 |' L0 a1 P
{
0 H# r) I. ] `6 B. J8 ^
if (upp_buffer_a
!= upp_buffer_b
)
) k8 v9 S" E3 d
{
1 b# p) b; a( f
upp_error_count++;
* @0 D& t! |* M3 e, S
}
/ [ O0 U; Y' R0 h
}
) s/ c% Y. E$ w5 L
}
! L5 N! P( T8 D, W& E. T \! w( U; X
; H; G7 G- j/ i0 t6 ~, I) A
/* 报告通信结果*/
, x; S0 \. N+ m" }
if(upp_error_count != 0)
! f) u" r% g/ G* f
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. b& a1 W& u: C: Z; I. a9 Z
else
, E# f% n7 j8 ^5 m1 P
UARTPuts("uPP transfers complete!\n",-2);
' z) s) e1 v9 L4 ]
# K/ O, }0 ?& G
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 j E% O5 U/ h8 [, Q# R. Z/ A8 ]/ t, L3 ]( c
UARTGets(ch,2);
( X" ?! l8 G$ B" m, z! ^
UARTPuts("\n", -2);
{) [0 C" w) i% C# b7 ]- [5 a
! h! x/ \' C+ ?9 m( B9 d- ~5 [" p, `
if(ch[0] == 'y')
: a6 J# i2 v4 z
{
% n) C# o% V/ v: D3 n8 t
/*打印全部读到的数据*/
* }" r0 Y& a Z& l8 F/ Q
for(i=0; i<upp_frame_size; )
: T* b5 }2 @" t
{
/ r Z W( k5 c
for(j=0; j<5; j++)
0 a2 I5 [& j' Y j4 t# Q
{
) N6 W f R& c: {! \ \+ {
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& G1 m' z) N7 s2 z b
i++;
" A* Q0 I. O8 _
//if(i >= 4096)
, r" a! z. j4 b& q# T
// break;
# O$ D% H" z3 ]) |7 a
% a @+ x( ]9 G v) Z
}
3 m2 u0 W: y: ~: n% B; s
UARTPuts("\n",-2);
. C& |& Y0 s8 D8 l) k* P
}
( W3 u V& J& H% \
}
% j( J$ w, b8 z) a/ ]; R' b7 V
& n* w$ ~" z7 D$ ~" m" x J
}
: U: ] n/ ~7 ^8 F9 n
3 m% _$ T& V) `! Q, \- |' l$ d2 F
/ X) t! B8 |8 f X; ^
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. {* z$ U1 n% l0 n& l, o
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: ^8 D8 ?" d0 [1 [, C
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4