嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- F% j3 x; h& ?1 a) @
Void UPP_TASK(Void)
. d6 E3 I4 h' H! d. m
{
4 X' u1 [4 h7 _! ?- A: y; E/ t" Y* r
3 T: q5 C: L8 C" b! n8 X
int i,j,k,target_int_count=2;
! i' H0 Q$ r& ?+ o6 f
char ch[2];
' l6 y0 E8 B) ~5 u6 {
' z& m, F8 B" g; C6 Z
, Z9 @& l- A' ~3 \
' ?/ C P$ r- }
upp_interrupt_count = 0;
2 {" L9 R% T: u" }' W+ h8 o
upp_error_count = 0;
3 z; c6 P4 P* i, w
% @2 J, W* J+ S" F
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. ]# t' |! B X
// Initialize data buffers
$ U: B* D7 H% p( C
for (i = 0; i < upp_frame_size; i++)
7 s+ u" _9 i$ i. [, [
{
$ K b& A: G$ e( J
upp_buffer_b
=i;
2 S7 A8 Y. C# u7 u
upp_buffer_a
= 0xDEAD;
' B! I" }$ t5 W
}
2 H; P& I! n( r& k9 s7 F
7 {! K3 M$ [! R' I
//for(i=0;i<1024;i++)
, Y E0 A: {1 |6 I( ^+ _
// temp
=0;
% `6 q2 K6 I C% \# F) O
: n( g. S* f0 Q- d4 {; S* X# E
//UPPReset();
* `# ^: d+ J- n4 `
/*启动UPP DMA传输*/
|" f0 ^# `5 \7 }0 ]$ F- {1 d/ ^/ o
UARTPuts("upp_prog_dma_i\n",-2);
" |1 q! H: V, ^( ?/ t, C' o) ?
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! i1 g: c. s% g# A3 U. ~" _8 b0 o
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) a6 M4 Y/ I, H6 J0 J: b* ~
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' ~0 n" }* B. G8 ?) _
7 g$ m6 y6 G4 Y8 Z
UARTPuts("upp_prog_dma_i\n",-2);
5 I+ k1 g k! W& U0 @& u. S
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 Y) h9 E& |1 e" w) [6 W- W0 m
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) D, u h$ P5 |3 H U4 M/ `
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' d9 f* W# g* F* Z% K% H
. O# H, O6 [9 x: M* q
/*等待UPP传输完毕*/
/ \4 r- R& ]0 X. S; S; K
//i=0;
0 l& m0 G9 F! Q# O& g* Z
//j=0;
; }3 ~! [# i [0 K3 u" W4 _* Q6 T6 j
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ Z: w- b: b7 X8 ] L# Z, C F% _
{
+ e7 g- d$ r# e8 H
/* 测试UPP传输的同时操作普通DDR数据
& c9 o2 Q4 B; a% H
temp
=i;
! B$ S8 v! C( p F5 ^' O
i++;
* {4 W3 Y3 G+ y8 u" s8 A
if(i==1024)
0 P) j3 l9 ~* G; D
{
$ h5 ~) f/ M( i- y( o
i=0;
7 e# n& @) [! L; x- W% f/ i% Q
j++;
7 i" H4 L% R7 U* t4 Q
}
3 s7 a* G& x' ?/ T: c$ @. R
*/
* W0 i5 M$ s ]# E3 {
; i( u, p9 d( {# Z( v
asm(" nop");
/ S/ b: }% y1 p H$ k' c
0 S' g; D* X8 A$ O$ B
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- Y, L C, j7 S- Y( w x
}
" Q& l! `- x v, p/ F" \ ^
6 m" W" m' N; w
/*检查UPP传输的数据是否正确 (loopback modes only)*/
- ~6 o5 @- w9 G! F9 o8 P
//UARTprintf( "i=%d\n",i);
# I. m+ ]. |6 I% e
//UARTprintf( "j=%d\n",j);
f( q9 _% j" f9 ?) \
UARTPuts("Data mismatch in buffers.\n",-2);
+ k! e: L0 \. h7 A
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 g) V V" M# d: R x5 q1 E L
{
$ _9 Y D4 d0 @) V! U+ G; p, O
for (i = 0; i<upp_frame_size; i++)
8 K. Z M# s$ B, l, U
{
, X+ W) J+ G) [, c1 x" f
if (upp_buffer_a
!= upp_buffer_b
)
5 k0 I4 o* p+ ~5 {9 `4 u$ {
{
0 w& l5 r8 [7 F
upp_error_count++;
% O& g/ Y! v T; S0 P3 I
}
. V2 t5 ^3 M% X. o
}
* ]4 \% f3 x7 C: N7 |$ c
}
7 K: O; u4 u, i" I
# ]+ c5 H7 s6 k8 H
/* 报告通信结果*/
: l7 M: L1 x2 e. D& s, f! [9 Y
if(upp_error_count != 0)
H2 ?3 [ F! {$ u4 b: t5 x0 v
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 X. _# h, f8 e" j/ K
else
+ P3 p& g& N+ @, y7 a: D3 _
UARTPuts("uPP transfers complete!\n",-2);
4 x1 ^" `7 E' ~; g0 T+ @/ D
. n9 I( N3 w) u: d
UARTPuts("Do you want to print all the data?(y/n) ",-2);
9 }# F% K! O4 r, Q
UARTGets(ch,2);
" J" e. v5 N( P0 u. w$ \; q1 _
UARTPuts("\n", -2);
3 U7 o. i, d3 S" Z% C
0 C2 i, A2 _) ` ~2 r7 A
if(ch[0] == 'y')
6 r" u2 C2 p1 H! z" D/ x
{
# R" Y- q; O% i% V. t
/*打印全部读到的数据*/
5 q! J: X1 u+ ~: P2 `
for(i=0; i<upp_frame_size; )
9 s. X, u" s8 c9 ^: }
{
6 Y' D R" Z) R2 E5 g8 j
for(j=0; j<5; j++)
' E+ ^$ q1 E, i
{
. ?2 d e) D; \- t, b3 S: L6 W
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, n, u( I* j! u9 z
i++;
3 \6 `4 h8 r. d. [, A; c' y
//if(i >= 4096)
. T* n* j, ~8 \- X/ d/ z7 J2 ^
// break;
+ v9 N" J. o$ k
( H' M2 H! { `. E2 q0 `* H' A+ K
}
: ~+ p0 q' F$ d) m
UARTPuts("\n",-2);
9 T, O% d. \- P8 ?% r1 h2 b
}
* Y8 N$ l1 d6 X" @
}
, t) G D m0 t* i; p
0 a( Y8 t( H7 J. W+ X2 |6 G* `
}
8 C7 U$ G) w4 |; r5 b+ t
- V8 q ]$ F$ h2 ~
6 M8 n9 y( o/ ]2 e& a% h
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 T T2 u- z& H+ }
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: q( a) o& a+ b5 r8 ]
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4