嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 i+ a) e( G3 d
Void UPP_TASK(Void)
& z2 M7 H- ~. _ R- Y' [% O
{
! a- |6 j1 t N) G. l
1 k7 C9 C* ~4 J* `; ^, V
int i,j,k,target_int_count=2;
5 |/ L, i U1 X) r
char ch[2];
9 f5 O" F2 Z6 p# h: y7 r
/ n& u+ @9 r! \) O- D' {- k
: [, a% y4 S0 t: ], v
& r, _# K! k( ]5 N+ A$ v/ @% O% F
upp_interrupt_count = 0;
! e, W2 ~0 V9 q* V3 j7 J6 w V* Q
upp_error_count = 0;
( A8 `9 H1 c: z
" a0 a0 L. t1 l, v1 i" j Z& ?
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" K1 m1 h7 E' y2 \
// Initialize data buffers
! z4 {: W$ o9 y; S) J- e w Q
for (i = 0; i < upp_frame_size; i++)
% a0 b+ k5 ?5 p3 X0 s" c
{
$ {* K0 q! I( o) R
upp_buffer_b
=i;
- C. F0 O; u- g' R2 U, ~
upp_buffer_a
= 0xDEAD;
- W1 A, E/ K( w
}
& J$ M" d$ S R b4 ]7 ]
$ u' c9 p8 ]% f) ~! _
//for(i=0;i<1024;i++)
" {$ _$ w. M7 G8 }: F
// temp
=0;
. d V* F) h, X+ C' O1 _; A
0 u5 ^4 t5 `6 ]6 W7 B% i
//UPPReset();
9 p) E+ k e' A4 s J* `
/*启动UPP DMA传输*/
7 M9 _0 W9 @" _7 V9 S9 F
UARTPuts("upp_prog_dma_i\n",-2);
( A7 B/ f- s# w- `: m9 K+ h0 g9 B
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& D6 U) K8 Q; M& @
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ K! [/ J9 Z3 U6 j
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: z5 M* x; n7 |9 ?
; m' ^% X$ i% ^' I% a
UARTPuts("upp_prog_dma_i\n",-2);
/ c6 n6 O" f2 _1 s1 t; i1 O4 w
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; l: T! H0 ]' ]5 ]( d+ T
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, H) O/ h* }9 v5 @
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) X- c& u9 j, |* q# O9 C0 p
) z' }9 O% O/ e: u; b" z
/*等待UPP传输完毕*/
! ^! y- [$ y, _ P, m- L$ ]
//i=0;
7 K b* N9 W/ @3 g4 y
//j=0;
4 d7 z3 h. A! ~) g- g6 \) F
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) L% ^; |9 M1 k# m( R# h; N
{
( o# w- [2 S" B, ]; L9 Q# j
/* 测试UPP传输的同时操作普通DDR数据
- [+ s; `. }" }; n4 V0 y
temp
=i;
2 a: l" Q% Z3 j7 q
i++;
0 J6 R% A5 O9 z) y7 O% t a
if(i==1024)
# u$ ^2 t/ }* E+ ~8 ]9 j) j
{
3 ]0 ?. [1 w- ~2 p* R0 O# l% p
i=0;
0 ]/ N% ?+ z6 C" Q5 W
j++;
1 x" `* u, B8 E0 W2 y" i
}
+ c7 y7 }( h1 g
*/
8 a) ~, t R2 `3 Y4 S5 A0 g0 w
2 ]7 G$ ~- B( r3 L' w
asm(" nop");
6 G! D/ G4 c' _ O* E% x
: U& I/ d- w; c5 l, @8 k0 t! t7 v5 y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ h9 z: G/ L& C- J0 \
}
/ b7 ~8 n& P' N$ s
6 m: M6 L7 F& V" t' I
/*检查UPP传输的数据是否正确 (loopback modes only)*/
d5 s! }& C, s: P8 Z
//UARTprintf( "i=%d\n",i);
! W$ C4 a6 T3 V) _6 j
//UARTprintf( "j=%d\n",j);
9 U1 A5 o1 ?! ?. o8 w
UARTPuts("Data mismatch in buffers.\n",-2);
2 t8 h0 d, {2 x2 H8 _
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 m" |. _2 Z+ E
{
$ Y! O/ ]! A4 y" ?0 y$ K- n
for (i = 0; i<upp_frame_size; i++)
) q1 x5 t; ]) v& K0 a
{
* ]1 S" m% Q" k
if (upp_buffer_a
!= upp_buffer_b
)
- x+ W% [/ c% r* Z: ]
{
0 s7 G6 g6 L% ]% f* u( J$ d7 u
upp_error_count++;
2 `* o# j t! T. z2 H5 D
}
$ B+ `9 g* o" M% s4 E4 E0 ^
}
1 i4 [& r/ v+ z' Z2 q
}
/ J3 C k3 C& A* t8 j
- I! D$ I% u) P1 n7 |: F$ R1 y
/* 报告通信结果*/
1 \- m! w9 f9 z2 `4 K& Z% F
if(upp_error_count != 0)
8 R) @0 w8 M) F/ `3 u! V
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# ^: K0 Y3 r- `; R
else
" Z, Z+ w* ^; M2 _" F
UARTPuts("uPP transfers complete!\n",-2);
9 p! h/ m( l, ]% v& J0 n
0 `1 v; m) _! g/ e( N) V
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& v+ U$ F0 V6 P& e! @) ^$ v' \
UARTGets(ch,2);
$ A$ o' T s X: ^
UARTPuts("\n", -2);
* h2 ~5 j; t/ G& H: s3 H' Z0 i
" [4 D L/ p; m( y2 C
if(ch[0] == 'y')
! A6 H+ }" S. J8 K: V' R' U! s3 Z% G' t
{
! u; W+ d5 s) A& j9 K3 v
/*打印全部读到的数据*/
; C9 i% d2 L$ E( K* Q+ ?% _& p! Z
for(i=0; i<upp_frame_size; )
$ Y. `* [/ }# m+ n
{
: n, a+ V# c6 p2 i5 P
for(j=0; j<5; j++)
4 u- ]0 R& a7 k/ P5 S
{
: T7 r- ]. k4 \* b8 R4 J$ Y# {
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. `% L; u' @$ r3 f5 @! o7 r1 Z
i++;
0 [" f% x8 T# ^: U& \
//if(i >= 4096)
' L1 i- [" f& E' C+ Z- D a- z
// break;
" Z) T5 Z% ?1 b0 W# [1 a
' u @" B* P$ G* L7 V
}
" v' S9 ^! K# t7 {; m$ x
UARTPuts("\n",-2);
, X E7 h$ y, r5 x2 F! u) B$ f5 x
}
* {, w# W# v+ U4 m% M3 C
}
2 Y- A/ H2 C3 T1 }, t' U
- x& M0 e7 n$ _- w( \/ z* Q! Q
}
( c2 y4 u4 V" w# G
: g5 U! B" a2 d5 F
. Y. }5 m9 r# v3 f5 I
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, n5 o6 l, T/ m# L; [
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ t5 p. p0 Q9 [& m/ P& C, S
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4