嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# ]% y8 h5 i$ w! o$ q& E1 J
Void UPP_TASK(Void)
: ]' v7 }6 g9 Y6 ]. m% |! i
{
2 Y: a, ~, W) }: j
3 y3 B% d4 G' B6 ]9 A) F% w
int i,j,k,target_int_count=2;
, z: G) ~# A3 x, A! M3 `8 D
char ch[2];
4 m1 e( [# P: B" L5 Z! s
+ N* u' m: R' C2 p
0 i. q8 y! E7 {6 E& X. S
; D' ?4 j; Q- F7 u! `7 \* Y
upp_interrupt_count = 0;
4 _( [/ ]4 S e3 G" L P
upp_error_count = 0;
$ b2 ?, @4 j" C" n$ Y
! ]* K! ^$ }" S* d$ F# m# a
UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 b+ g: b1 B+ B9 v! J& v
// Initialize data buffers
c/ W3 b+ _ L( r
for (i = 0; i < upp_frame_size; i++)
/ B" R3 r. \0 t4 N; S0 [: Y
{
" L6 }( L3 z. s K
upp_buffer_b
=i;
! t! F' b$ d% k
upp_buffer_a
= 0xDEAD;
- H% H( |4 X( Q! j5 z# r+ T
}
3 T! J6 f( r6 N0 F
2 @. x) Q3 P# N: @
//for(i=0;i<1024;i++)
% a4 w9 z) W3 m6 v
// temp
=0;
" o, Q# j# S6 I
9 Y3 X x6 y! y+ t4 y% F9 Z/ ?
//UPPReset();
6 E8 w Z& p5 D3 h( Z" r
/*启动UPP DMA传输*/
4 m- x2 @5 }4 r' u
UARTPuts("upp_prog_dma_i\n",-2);
8 U, h5 b* C6 ]8 j. B8 m7 i! S* e2 k
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 K, o2 i, D# k& s
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ F% X- k9 y7 W* w9 L
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 A4 X% a4 O0 Y: n$ E5 U
' y5 B0 y% p! @
UARTPuts("upp_prog_dma_i\n",-2);
1 H U% q! R8 `- S' U# _' d
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 ]9 x8 G) ~) C2 x: \
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* j" z" A: U% W$ d9 s
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 S) k6 R$ n1 T, \/ [
* p/ E/ u# D& i' N
/*等待UPP传输完毕*/
/ s$ ~6 @$ W. ?4 R& n5 ]9 E0 F
//i=0;
3 m% b! N2 J% B& b
//j=0;
4 R9 C. G v6 x5 t
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 @3 N( z& H. y6 m
{
7 W5 y3 d4 R3 D" O9 U
/* 测试UPP传输的同时操作普通DDR数据
1 C+ L' y/ U% H! @3 m" z( h9 r
temp
=i;
% S' Z2 s! x2 P% }
i++;
- l+ r j! j3 K/ a( C, x
if(i==1024)
6 k7 [7 N+ t" r, w1 |# R# F
{
/ U9 T# u' i0 M5 p, q( h3 i
i=0;
+ }; O5 r8 K2 k5 C* v: O" ?# V
j++;
) T* j" Q& M( X3 |( X# n
}
' |* e+ p* O% P7 v5 {$ m z4 _3 |
*/
% O+ W4 o/ b- m& H
3 Q5 T5 b- w5 |2 T8 s2 ^+ U
asm(" nop");
0 y9 |1 D8 J$ `9 K# V
2 k( c Y6 b; S/ e# b. E
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! [, I7 O6 O8 R) h6 Z9 L
}
, k! D0 i' y$ y0 e$ j( Q$ m1 k
- K' f2 Z4 e" o, y
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ [( G! B# L4 F; t* U
//UARTprintf( "i=%d\n",i);
: n5 t! V0 i. J3 o5 Q
//UARTprintf( "j=%d\n",j);
" K" ~; ]& Q' ^/ @& |8 e% E% ]
UARTPuts("Data mismatch in buffers.\n",-2);
. V0 l9 ?3 W& x6 Z' A' m
if (upp_interrupt_count == 2 && upp_error_count == 0)
% A l6 S, S! d& M, M
{
: p! J7 L& K0 g/ y R
for (i = 0; i<upp_frame_size; i++)
/ v3 y3 D9 s3 f7 P( m! r
{
3 C: v! P0 R* _* u
if (upp_buffer_a
!= upp_buffer_b
)
g/ v9 K4 Y( e$ J. Z6 N z* E8 N
{
1 } N4 o8 W% Q9 c) z
upp_error_count++;
5 o9 B) B6 e1 T R+ X C
}
7 ^' B4 V& p! u6 I; W( R
}
+ J' r: A _7 {# j- E9 R
}
. r6 s# o7 }9 j1 E/ V# f/ B* g
4 I$ ?( ]- j6 z4 h2 S
/* 报告通信结果*/
: q8 Y6 |1 Q6 o$ w: ?
if(upp_error_count != 0)
' f* v, J, i; }2 m: K6 L
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. Y" e/ f5 N" w6 l* B
else
. H; k6 H- a: g9 t
UARTPuts("uPP transfers complete!\n",-2);
8 Q" q# F1 r4 z" B
. W8 p: M7 f8 y; F
UARTPuts("Do you want to print all the data?(y/n) ",-2);
q" Y( p. j: O! h3 p; F
UARTGets(ch,2);
+ I8 g& c f# y2 w* B. `( Z/ ~
UARTPuts("\n", -2);
9 `" y" F( |( S9 k$ Z' O
8 S, q& x @! K
if(ch[0] == 'y')
/ @) V" d4 P m/ J
{
) a2 z, ] f2 m; D! l3 ` S
/*打印全部读到的数据*/
* Q, C, U; p* |6 p
for(i=0; i<upp_frame_size; )
8 o+ X Y4 N- M& L! o u: z
{
# J% j: L9 I1 o( Z5 j5 {; w ^
for(j=0; j<5; j++)
* Y( P8 ^7 V' d# p- V) L5 r
{
! Z' z1 h: d" B* t: I% \# q$ E4 t
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 l. O O: E! K: q! q* R, C Y
i++;
. E* j4 d2 _/ `
//if(i >= 4096)
5 u% z, P0 x$ v5 u. `2 G4 i2 Z
// break;
" m5 i7 \/ W/ B4 F' v7 a
. s9 S1 Z% d: {" F; T
}
4 B# L; Z5 `# H* l
UARTPuts("\n",-2);
6 D% x5 }& N- I- f) B$ `' g4 z6 W
}
: i9 ]- g" T A% `
}
5 k! Z, Q# m0 b) o1 a6 @( z
$ O' P) O8 h5 k# p
}
5 }. _6 k O: L- n7 h. @
5 K. C5 v2 p, @% x2 T! X+ r: W
# H6 D2 J. R: U6 v) r7 G" f' Q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 s# P/ k7 a2 w: ?0 s! B# v; g
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 m& ^- o8 n; p2 Y
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4