嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% S$ T3 z; _/ l$ U. Q4 Q# F; M$ R
Void UPP_TASK(Void)
2 P1 Z$ K4 p4 Q5 u
{
- |0 ~4 D- v# s! U6 f* [* P: ?
3 L# p9 e; `7 i! g
int i,j,k,target_int_count=2;
1 w! H3 y5 Z- K! g- q- q
char ch[2];
1 E0 v4 l3 m$ x, i! Y6 [# Y* }/ M
( M) H6 }1 B8 n) l2 C/ I5 Y
: z4 x- w# A5 B
. L: k& j$ [+ {* i% P0 Q4 {' n
upp_interrupt_count = 0;
# }4 u2 Z/ b+ T( |1 ]! M
upp_error_count = 0;
. d/ w4 R7 W! }+ l0 l$ \4 e
0 T/ @% B1 c9 G1 U, u; Q" \
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: c6 P2 Q1 C$ o" x
// Initialize data buffers
( |) a r! n8 @# X
for (i = 0; i < upp_frame_size; i++)
* k/ b2 Z; q9 q$ W1 d; z
{
, R1 F7 R# i: Z! Q. f- s
upp_buffer_b
=i;
! E" j8 v+ m5 V/ B9 ^0 l3 k" U
upp_buffer_a
= 0xDEAD;
$ A1 A5 N9 M/ L: K% J
}
4 o) P+ q* u6 n
) \) }5 |$ A) {9 \7 w9 E ]
//for(i=0;i<1024;i++)
$ g8 I- p8 B+ j) y! J
// temp
=0;
: H2 X( o5 D% N7 A$ `
1 W7 y5 q2 h* U, Z. E, v0 N2 V7 H
//UPPReset();
: F( M. u3 E1 i; ?3 U* m3 L1 ~! u
/*启动UPP DMA传输*/
# I: j' ~$ C# F2 G! s. B* @
UARTPuts("upp_prog_dma_i\n",-2);
/ f% D) f8 u5 a0 B1 Z: x( X# f# I
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 b. z( r6 f% P' ?/ A. _/ @3 l
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- w+ V) c/ F) ]0 Z% ?6 t
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 e0 \$ \4 n# `3 S$ g, y
( F5 t \* O- i6 C9 i+ S0 Z
UARTPuts("upp_prog_dma_i\n",-2);
$ z7 F7 ~; p2 T; B7 U
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" E. q, }2 e3 P2 ?, V9 q+ y$ e; R. Q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* q0 Z5 J+ q3 B
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% @. Q9 B N/ p9 n$ d" }1 S. t7 p
R* t' E! B) u+ F. }7 t1 ]0 L
/*等待UPP传输完毕*/
. g0 [, p$ x0 L$ W
//i=0;
! H0 A _, a$ b+ j1 g/ m
//j=0;
2 t1 h% D( X% c0 ^% e3 W( _
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 c/ Y8 ~+ [1 R6 D
{
v) B. e: ^1 l! ~' w; I \
/* 测试UPP传输的同时操作普通DDR数据
3 C3 \, z; h5 N1 W3 I: ?
temp
=i;
( r" [: s3 \6 ~0 r6 X M9 Z
i++;
/ `1 b9 C2 {# A: d' [( s0 V
if(i==1024)
' u4 Y% W( V! Q* [" _
{
' S6 T, Z& s9 y
i=0;
' t2 B" X6 y2 g" {2 h
j++;
, |7 Z" [- L& g( f) G2 K% ~
}
: Y0 [ |' L. p8 J/ k4 ^. U4 e
*/
& x0 u: y1 y# r# W; }! \6 q
, D4 \; ~' s7 V2 i7 B1 n; d# G
asm(" nop");
+ l A) q. [+ G3 f
0 h# c( c" w! U7 X
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! P+ V. u& P' z& f& }* g6 ^
}
3 b) B8 C, A. I1 u4 K
0 r) m% s8 k. R5 n% {
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( \5 U3 s' ~# |2 `
//UARTprintf( "i=%d\n",i);
5 r) @% n! a v% V
//UARTprintf( "j=%d\n",j);
& g* l5 w3 t) }+ o: a' D# U5 v/ b
UARTPuts("Data mismatch in buffers.\n",-2);
/ p& P/ |/ Y7 B1 s' ?2 R3 ~; ~
if (upp_interrupt_count == 2 && upp_error_count == 0)
- ~. n8 Q. i. E/ Z2 O
{
; y# ]5 Y: }% Y% B) m( o
for (i = 0; i<upp_frame_size; i++)
a( U' N+ w5 i/ e5 D0 J7 N# k
{
, I D% @0 c" g+ l& x
if (upp_buffer_a
!= upp_buffer_b
)
8 q$ ?9 O, D+ G, U! \" }
{
/ P k$ q7 o* t& J" O
upp_error_count++;
5 F# m- u( g- n
}
& g3 l$ P! D$ A# {& p0 p m
}
" {, K' ~$ [! j, l$ R, w
}
) _1 }# |9 n& \1 c, \4 U! q
5 c+ I% g& [ t) p, Z
/* 报告通信结果*/
8 Q" ]( a( h5 Z2 K9 W6 f, P
if(upp_error_count != 0)
. i0 P0 S0 o3 v$ k4 o! g! {
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( F2 m$ _: |) N
else
6 _ m) I8 j6 o6 k1 ?: Q
UARTPuts("uPP transfers complete!\n",-2);
: O5 B$ R3 ]! S( t
3 {* u+ h2 m' ?! X3 m- M0 W! Q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
! Q% F7 } s/ R7 V
UARTGets(ch,2);
% n: m8 [( T- D
UARTPuts("\n", -2);
- [. O. H$ k4 Q& _ T1 j
+ E3 g, Z P: V' @" R1 P. D
if(ch[0] == 'y')
" B, b. \/ c# H7 }+ K' [
{
' U7 m9 p* H5 @6 O$ a) d
/*打印全部读到的数据*/
/ c4 l, r& R+ W( d) F) t5 f, J& | R
for(i=0; i<upp_frame_size; )
' ?- ~4 M D- I( q
{
2 F/ k; O1 E+ p& ?& E% M8 V; x
for(j=0; j<5; j++)
7 h+ N9 Z. ?; K/ \
{
' a, G4 l2 B& Z( e
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
8 R4 T1 ?5 X0 r/ w! `! O" h$ U5 m' W
i++;
% G3 m; a1 P# u2 r
//if(i >= 4096)
& c# q6 s" G n9 o8 _" g* X) q8 v8 j
// break;
' p0 s4 j, e' y/ F/ Q) P5 X
; Z6 {' i0 }2 C+ S; A" P
}
: ?" I& }: U- B3 ?
UARTPuts("\n",-2);
6 I, f0 l( r+ S5 J
}
/ p! j+ ?( R+ @7 t0 B3 Q
}
8 I6 f; N9 X( N" F* o1 T
$ \/ r4 `( H( I3 J2 r( m% `
}
/ D5 Y4 | e6 U" d- I
# g" d# @/ F8 P, B ?
9 p& c* I* r5 S0 N3 G1 l# n5 d
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
q$ u6 Z) H$ a. Q2 ]+ o, ^
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' Q+ ^% }) e1 d Q
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4