嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' ?8 \8 t' K! t+ }$ I/ p* t
Void UPP_TASK(Void)
- [" t9 L8 B7 i! e
{
) P( A& ]/ U5 S' l6 ]8 t: L
$ |& w" ]( w- }0 J
int i,j,k,target_int_count=2;
+ \- {4 l" P! q. {7 F
char ch[2];
) O( n( v0 J4 `; b# R2 C. R
; E: n! ~. C6 V* n' b( S. w
# P5 k, V9 h1 n9 m- G* O
" k8 \' k7 w6 N* _4 z. |/ a
upp_interrupt_count = 0;
/ E) G6 F: j' r, Z/ j
upp_error_count = 0;
: h' |( d) _' ], z, I
+ }5 G$ f) o# c4 B) m- g
UARTPuts("\tResetting uPP buffers...\r\n",-2);
}9 B- M% r1 g3 N* |0 `
// Initialize data buffers
0 Q3 o- B: \. u( k
for (i = 0; i < upp_frame_size; i++)
3 Q) F/ {6 d7 m8 V( w$ b
{
. f. |# h& }& ]2 l0 j
upp_buffer_b
=i;
0 Z) F! ?; X: ]* C0 T. ^
upp_buffer_a
= 0xDEAD;
7 Z+ L. x, b0 n4 x
}
4 s m8 B$ h, B
9 W1 ]7 u8 ^2 u6 X5 w* l
//for(i=0;i<1024;i++)
, C1 R( y1 ?2 l. a3 ^
// temp
=0;
p& U- f3 }5 Q
- f9 A) a; a' P9 u- e$ P* f
//UPPReset();
2 ^1 q. d u- M6 `6 H
/*启动UPP DMA传输*/
3 B2 e8 a1 N, H Q( t
UARTPuts("upp_prog_dma_i\n",-2);
( Y' c" @! @& s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 i6 [- i* n! | n
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) m0 e( B, H) T* u& j/ Y
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 x! M, n( \ F2 r$ x- D
7 ~$ x2 z+ j$ o, _- L |4 p
UARTPuts("upp_prog_dma_i\n",-2);
9 J8 U# p+ T( d' D7 R: B' S0 i
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& M9 H) J% T7 K# S* G0 o
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 w t9 M$ u2 P
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 [8 P; ^' ?, P8 F) h3 {; t
3 O& v; X0 \2 ~% P* @ F
/*等待UPP传输完毕*/
) q4 ?- l: n* A6 p/ `& g5 h$ p
//i=0;
7 P2 d- C3 S6 R: Y6 V
//j=0;
' q6 a" W; |8 p3 ^6 j$ k) X
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 q; n5 T4 p- u K
{
6 i3 s1 ^7 x" Y, u, `
/* 测试UPP传输的同时操作普通DDR数据
$ J0 s0 O- y2 h( Q
temp
=i;
0 j# E# Q; p2 s5 q
i++;
. Z& N7 |* _0 B1 m+ y( P
if(i==1024)
% Z/ U Y( \" P5 E
{
, S2 }' {# L" ]' D$ V+ ?. o
i=0;
& Z" c( Z4 ]% H
j++;
# M2 w! \3 A& B" c, w0 W& |1 \
}
5 d1 z% y7 `! [0 h ^
*/
& E) U6 C6 ^( P& L3 d- G9 h) L
: X7 C' j, g& N! v
asm(" nop");
, Q6 F; q. a5 @- H" l! d: Q
# e! b. u% K1 B, c
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: U6 ^0 D, Z$ G' L" t" F
}
8 H% d4 E! m& J* A
* e" `8 S" H1 w* F3 ^0 |
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ ~: d3 u- ]; H
//UARTprintf( "i=%d\n",i);
; i7 R' `, W7 M; I$ [0 R5 \
//UARTprintf( "j=%d\n",j);
, D" m7 ] Y: y
UARTPuts("Data mismatch in buffers.\n",-2);
w0 T1 A, E0 r5 R8 L3 T
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ u7 s. o+ C, ]- V
{
p% j7 d3 }2 W5 ?6 ?7 X
for (i = 0; i<upp_frame_size; i++)
; K/ e" G* b5 z* Q$ c* J! A6 s
{
5 f7 S& y; l! N$ p& @; f6 z5 y6 R
if (upp_buffer_a
!= upp_buffer_b
)
# D8 w1 v9 z$ V. d: s& _
{
) D' F7 n0 t9 Q1 v+ k+ g' ], R7 N
upp_error_count++;
4 \/ o2 l% B( R* \1 _' i. Z, A. \
}
, r( l1 k d! k0 ?$ X" X, B
}
" U5 e1 S4 s b0 J$ ]
}
4 J$ g8 B) Z1 D" J( D. J
2 E. K" E. `4 H$ E- V
/* 报告通信结果*/
& Y( K" [: U; F8 Y9 k
if(upp_error_count != 0)
G5 D& X9 \4 U" ]4 n- {- K4 g* d
UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 F6 p' p; _) [
else
! a3 G5 ~# v& y! z
UARTPuts("uPP transfers complete!\n",-2);
' g$ T( J+ J8 _& g/ u' O* w: e& c
; q6 p c9 ?5 [/ ~# ]& ]
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 Z; K' R- a# T8 v; _
UARTGets(ch,2);
: B+ \# G; ]" V# W6 k2 c# j
UARTPuts("\n", -2);
& a9 \' S! k) l% r9 O: I- e. N2 M
5 w) W( k7 p9 v6 y
if(ch[0] == 'y')
# V- {9 V8 q! B4 J3 O
{
4 ^) o- z; V! @. y0 ]1 g6 x& u
/*打印全部读到的数据*/
% _! Q1 k( c4 a9 x, B; q
for(i=0; i<upp_frame_size; )
8 d* S, t+ B1 {
{
7 v' X0 b, X9 Y* p" P
for(j=0; j<5; j++)
1 Z: z& Y `7 r# k( Q
{
: e: D- n% \* i$ }
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& \1 \ j0 w. `9 x& I* [
i++;
% v- c2 o7 A7 L( i
//if(i >= 4096)
) u, o6 L, |) {4 r9 k {6 V0 |. O9 T
// break;
. W' L- t4 K$ @1 R' v
) p$ H h: `* Y, L! m# a
}
$ Q: C; b& f7 g: v! ]6 S
UARTPuts("\n",-2);
+ v4 D g& l$ g0 @8 s- @" D+ ]
}
* P6 J3 \5 s2 l/ P
}
$ W- p. D( R+ i8 I
* g- |6 t0 g5 }0 l
}
+ F3 ]5 t8 l7 i% A* \) _# l
! T# t$ j X) m3 W0 ^1 j+ i
: Q/ i, ~9 `: f7 K7 t* G. G9 J: y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& c7 d o; y% `2 Z+ W5 q0 Y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. ^( V' Z( }" w2 i0 } F
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4