嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
^* w# b! D4 l
Void UPP_TASK(Void)
`2 V4 X) S! u$ R* a6 W$ ~9 k
{
1 b0 @5 R& N; n% P6 k T
* ]$ d9 o# j9 t4 d k
int i,j,k,target_int_count=2;
! z8 c% `4 `7 {- h' c& Z
char ch[2];
4 u5 K" I" @3 o
' |+ Z' I# q, ]. T
7 ^% N7 T$ e) |8 z
+ H" J% i" u4 Z& X* v
upp_interrupt_count = 0;
. t& H7 ?- e9 r# V8 R J( A" D
upp_error_count = 0;
! U5 Y" d' K) \- h3 D) L) q
! ]3 J$ k/ C9 j2 T; g* x2 n. u
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. n0 T+ o; F* W' ^9 x$ v
// Initialize data buffers
; G/ l' a: u8 ?% V8 O
for (i = 0; i < upp_frame_size; i++)
6 h! f( \. ? E. K
{
+ x5 X3 L3 p( b5 _/ j- S. _
upp_buffer_b
=i;
1 d7 m% `- Y2 T2 P* r& ]1 j' U
upp_buffer_a
= 0xDEAD;
- X% l2 K I7 t( |/ i. j
}
( J3 o- z3 V# r3 l% _, T
2 s" }2 S, M0 `( h( c: L
//for(i=0;i<1024;i++)
; S- y! C* l: N2 _
// temp
=0;
$ r9 A$ d, x* K- i; y6 n$ V% _# M
% O* r! e D9 O7 R; i
//UPPReset();
9 q e5 B+ M+ z0 Q4 t
/*启动UPP DMA传输*/
7 C+ ? j. @9 z" Y- H. x5 i
UARTPuts("upp_prog_dma_i\n",-2);
( l+ x! T4 n8 Q& ^7 O0 p+ J
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; E# ~& J+ |6 r1 V2 F) _
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( j$ y. q, r0 |: l
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: E2 s8 w# |3 F" ~2 A( r5 T6 `2 m
0 u, S' q/ W% ]( L' `* O. A
UARTPuts("upp_prog_dma_i\n",-2);
8 ~+ `# W' ?9 p* W
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 c9 H3 c2 Y0 D% P6 _
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 y( ^: B( w( p* T6 U7 P- k
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) m, Z. f* O5 i
+ _% Q7 _& N- ?4 l4 R5 h
/*等待UPP传输完毕*/
- D7 Z2 @4 R9 h( G7 v, A' a" i0 M
//i=0;
0 i, U; [ s2 E1 l+ x9 X
//j=0;
( \$ A1 M- H8 ^0 t/ F
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% s1 L* @9 x" p6 d$ r/ i! W% F
{
@3 U( ~2 Y$ _3 T0 Y
/* 测试UPP传输的同时操作普通DDR数据
: r' N x1 o- m( J
temp
=i;
2 ~0 a% r9 |# \; l3 D2 K
i++;
# x# K( n* ]1 G
if(i==1024)
3 j: v" @$ r3 X% U
{
7 ?5 {: z- p# E* L
i=0;
+ y7 ~ w( y& m
j++;
5 W O* w3 C% ?% A$ Q
}
$ @# U9 i, b( w3 i
*/
9 O% V+ H* L0 L+ i! v
3 e( C+ ~' Q7 Y& a6 g& x
asm(" nop");
1 W: ]& W/ Q' J2 h4 s' ~, F! ]5 D
( J5 R( n, @" u' j! _. n& u* L! i
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 K( w5 r2 B9 m2 w" W, }8 R: K7 H
}
% @; m1 G9 z- `* Y* u
0 d& W [1 o& O% g
/*检查UPP传输的数据是否正确 (loopback modes only)*/
0 {6 z7 U& H) O5 t) F; h6 V
//UARTprintf( "i=%d\n",i);
8 Q9 @+ J- O; Y3 F) y
//UARTprintf( "j=%d\n",j);
* u0 A9 o! j( b! r u) E* `4 [
UARTPuts("Data mismatch in buffers.\n",-2);
9 u' x9 {! ~( Y, M9 _$ Q4 a3 C
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ _2 f# p2 Z, W' {/ ~' _
{
; ?( x8 x$ H4 L P& i5 @
for (i = 0; i<upp_frame_size; i++)
. U* x) B' ^7 l& m
{
% `' `1 Z1 p6 L$ j6 R3 i
if (upp_buffer_a
!= upp_buffer_b
)
: Z6 I% z: B3 X9 F( N2 \ \
{
# \! u. x2 O) {5 ]/ k
upp_error_count++;
, k$ E: d. [/ [
}
( c! Z m; D7 w- e/ S3 t+ ]+ t8 P
}
# e; ?, K+ F: Q/ V
}
- L+ u0 A* a" S$ K$ _% H O5 x4 [
. G% @2 q& I7 }6 G
/* 报告通信结果*/
$ A; n5 D; F" w
if(upp_error_count != 0)
7 _. {8 u7 V6 n' z% p3 Y2 p
UARTprintf( "upp_error_count=%d\n",upp_error_count);
_* r2 f' A( ~
else
3 v; Z0 H/ Q1 A& z" R
UARTPuts("uPP transfers complete!\n",-2);
; W( ~5 O2 v$ g% O3 p
! E# E4 T- S& k1 W. ?
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 U. k# u K( k$ ^. c1 m' l
UARTGets(ch,2);
$ C' J8 {5 P. s5 h0 y4 d+ T) H
UARTPuts("\n", -2);
/ p F( { G: _5 U2 n, D% y/ H; b
( ]0 ?0 j* c! n Z) f1 e: P y8 |+ c
if(ch[0] == 'y')
( e; |8 h( l) \3 M( N
{
& e2 N4 T2 Z1 A. E% ]
/*打印全部读到的数据*/
: K# d I# N d, M
for(i=0; i<upp_frame_size; )
6 M% f: t; M7 k3 V! B
{
; k/ ?3 g0 F$ l: r- v8 Q' P
for(j=0; j<5; j++)
& ~% n4 Y# }0 N. t+ _* l
{
& h5 v0 D% H Z! l& D
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
$ u) Y# B+ v h1 ?" K! T' h$ h, }
i++;
6 X Z1 ~: x. [4 o
//if(i >= 4096)
. e8 R2 O/ z2 D3 G4 B, {& L7 C0 ]
// break;
" Y b$ {/ j4 L! \
5 A6 P) \' Q) E% s% V6 N, J
}
) I9 N, M' Z' z7 O* l5 T$ V4 l$ K
UARTPuts("\n",-2);
4 S% g3 y/ A6 B. E. O% ^7 K2 d2 d
}
) g$ p9 T/ j: C) d* a
}
, C- Z+ m! j1 A4 n4 Y: Q! H
) U7 Y8 W( j$ L' }$ h
}
1 ]3 p, s7 e$ U( e' J' |" i
A' f3 W/ H" x+ A) S) a7 Z
6 V: y f: [" b2 j) {- z
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 X& J* ~( T( Y: w% [& r% ^% `$ s6 A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 o4 |' b! y4 @+ g9 ], U6 {
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4