嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: M0 X- J. C( r& q4 ]
Void UPP_TASK(Void)
% Q! X7 d2 N* |5 ?# S
{
# x% z) e( E: J
. T/ I: F- S0 p4 O# d! y/ S9 K
int i,j,k,target_int_count=2;
% O$ w0 K, x1 U* G+ S- w' w
char ch[2];
9 g5 ~* L& r, I2 [
: J e& L4 V) r8 R0 X
0 N$ p- h. u/ Z
" e' l, i( @! q' F' q7 R8 @5 F* ^( b9 o
upp_interrupt_count = 0;
- Q" O8 ~0 U- `3 }* F6 @; F
upp_error_count = 0;
( q; {" Y$ `0 `( T: }! Z4 |
/ q; f1 U; A e" b* t2 w
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 S- r, |" g" x3 O
// Initialize data buffers
: G: P0 n/ G! l0 Y/ r; L9 N/ T
for (i = 0; i < upp_frame_size; i++)
! N, H& v1 D! s4 o5 e3 G3 l q, |& x3 `
{
5 c$ w" }+ `' d9 I8 O! V) p
upp_buffer_b
=i;
1 M' R: r& s" T) z/ ^; u
upp_buffer_a
= 0xDEAD;
: y& r- O |3 w Q' R) \8 y0 @
}
( [ G9 x" |) W% c3 M
. t" P$ r" a/ ?' C# e2 o( e5 x& D
//for(i=0;i<1024;i++)
4 e7 O& y# m% F9 u
// temp
=0;
, u: y% h C7 e g
* o# K F+ u- H
//UPPReset();
8 ?7 c- [' s/ ]+ @% t& W' S/ H" B2 b
/*启动UPP DMA传输*/
$ l( u) P# B) K9 i
UARTPuts("upp_prog_dma_i\n",-2);
6 D4 s O0 D: c7 u' d$ r( v
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' H9 e J7 H; Z, M
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- x7 y' D2 l9 @6 Y- r# A5 B
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ I- [9 Q5 Y5 J( S
; G F! }8 ^% D c+ R8 J
UARTPuts("upp_prog_dma_i\n",-2);
" D$ r* G; a& f3 c0 }1 x- f: A
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# T% y, w9 l8 C* Q6 u& C# i: t) J+ \
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: X2 M& E+ F' _9 v: A
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) X z/ N( r* A, i2 I3 W8 X/ W
9 v2 ?+ q8 i. G1 y
/*等待UPP传输完毕*/
4 |* f" |' d& M. z: T9 j' w
//i=0;
0 w% [7 ], w4 t- f$ n; w1 m& c6 H
//j=0;
# E$ M: @4 i4 z& \7 s
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 P' [+ t+ L- M, a- a f
{
1 B8 n6 p9 l _: V8 `. r# i# F
/* 测试UPP传输的同时操作普通DDR数据
( b; L! S }4 _4 C2 B% G
temp
=i;
" g& w, D3 z4 p& n5 [
i++;
1 s) i: b1 F8 D! O1 X* f
if(i==1024)
/ V4 n3 K' X. s' g* G) M: E
{
- X1 _- t5 Y4 X
i=0;
9 x. v9 l$ f; F
j++;
: b% C* R9 e& y+ X2 k
}
% s5 N3 m0 G) q& ~; d
*/
/ {0 i. x' }) X0 W
$ G5 |8 n! J3 w/ c2 N5 |. Y6 V
asm(" nop");
. F) b' U6 n2 q; M& p
& ^2 q5 x' y( {
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; L/ P5 L7 | Y: ?) E6 a
}
! O: ]2 z! G9 W& ]
, E0 A2 g# s( M
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; x8 ` w1 W% z; L, t+ q4 f3 T# B
//UARTprintf( "i=%d\n",i);
" I0 Q3 }' t+ C5 s* e) d; |
//UARTprintf( "j=%d\n",j);
- ?5 g, d9 t2 u
UARTPuts("Data mismatch in buffers.\n",-2);
4 ?5 S& B9 `' K# E! G! F! \
if (upp_interrupt_count == 2 && upp_error_count == 0)
& H, Z [& [+ X7 x. }8 W8 _
{
7 P$ ]# z. _ ^9 O$ }
for (i = 0; i<upp_frame_size; i++)
: S+ \: U1 Z0 f$ q( [+ m0 y
{
, z1 x4 _! {8 {/ T5 N
if (upp_buffer_a
!= upp_buffer_b
)
3 F+ X! f- U6 j# ~
{
# J9 r' y6 i, c2 C- O
upp_error_count++;
& z- d9 k7 U& D6 u5 w9 [6 N/ L
}
9 _; H( q% u3 M* Q$ [
}
9 ~6 ?* C' e X0 V& i8 Z' t' X1 X
}
$ i% f4 f6 X: l9 p6 f2 g7 O0 y
5 [( C D% T" g6 _! b' e+ U8 R [ J
/* 报告通信结果*/
f' b4 p& b4 _& }4 }
if(upp_error_count != 0)
" N% _$ L, A- p% g& T" P/ U- L
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 C$ }4 p( D o- Y1 d
else
- w! { R) s1 T0 |5 ^& ]4 z
UARTPuts("uPP transfers complete!\n",-2);
7 J9 f" ` I2 l
' H% U% `) ]9 G7 Q" x
UARTPuts("Do you want to print all the data?(y/n) ",-2);
3 e2 D) z3 G h3 y& l. j
UARTGets(ch,2);
7 l7 O1 t1 }/ b: y t7 _
UARTPuts("\n", -2);
+ ]+ e# X; Q' o, n2 l; N$ C
/ b# v8 W" s# h& b1 `5 _
if(ch[0] == 'y')
+ C5 C; \- D# H1 j
{
) r* g, y9 O7 X/ D& ^
/*打印全部读到的数据*/
& g1 h( p) F. s W4 _& b$ C( d
for(i=0; i<upp_frame_size; )
0 A1 ]' x3 O6 b, K
{
9 F# j' M6 E/ m) W4 w; H T0 z
for(j=0; j<5; j++)
) o) [ R3 d/ x- j8 A
{
- `9 w, N: I* F# D- j
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- C1 v' w* d2 k5 J( }, n
i++;
7 f, S8 @+ c6 \% Y
//if(i >= 4096)
& b7 ~, w: V8 b/ s
// break;
5 t* G$ u' D' c. T: h0 S0 w
7 w& h3 {) ~' ^5 j2 I9 z; R: W
}
+ Y; P4 J9 R* i4 }* s9 e" h
UARTPuts("\n",-2);
/ y' i- X, d8 U- I; S
}
: T9 [* S7 y1 t7 ?" j$ ~
}
8 \7 }. d- [( b6 L& f
& n7 @* @4 R/ f. E- `- r
}
2 K6 N. C1 |, L: d) ?1 d2 _
; f* q! D# P; `9 z+ F6 b
1 B7 r$ @5 C9 j1 W
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ B2 A R$ v& ~- e& t1 T
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% a! ?6 k/ P3 v4 g8 E
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4