嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 L/ R7 k: e' ^0 N( s' _
Void UPP_TASK(Void)
' v" T X0 c: ~& @
{
9 R* \9 O, e! I
, N9 {, N3 x) C2 v7 s
int i,j,k,target_int_count=2;
% U" l. O0 M# o6 k7 ^, Q" M: @' @+ N
char ch[2];
$ ]: x3 D, Z6 f; v! x2 R
; r, H4 t* d6 p
" G9 {: K; x) ?% n
7 B- ^. t- N7 s% s; @: s9 W
upp_interrupt_count = 0;
. b* i9 K5 j& M2 `
upp_error_count = 0;
" J! E* t' I9 n2 T6 w1 C! O
$ b' A9 F o9 p- d4 p
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 D! [: c. Y/ [
// Initialize data buffers
! B7 J1 u9 m4 ^3 l
for (i = 0; i < upp_frame_size; i++)
) r0 [" n* D5 M' g& C
{
& o* M4 i8 D, u/ M
upp_buffer_b
=i;
/ y! L' t Q' I
upp_buffer_a
= 0xDEAD;
2 E4 _5 j9 e& _. M5 e6 s9 {0 p
}
( F; S! |+ x6 f( Q9 ?* U
! P8 L) B7 a2 i' i" O
//for(i=0;i<1024;i++)
' V/ q; e( r/ E+ A' ~
// temp
=0;
! f' u. d8 J9 E1 j, G# g
# O" c$ i( {& E0 `3 K9 U1 T% _
//UPPReset();
2 i5 N* ]7 u9 J* `
/*启动UPP DMA传输*/
" Z" o/ Q! ^8 x2 o. Z
UARTPuts("upp_prog_dma_i\n",-2);
- q4 y9 P5 ?$ `1 w+ W, C2 X
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 u/ k8 Q- z* K4 K s5 q/ W+ Q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" A( v& Y% d* ?" a
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 r$ n# v9 _4 r; S4 V
9 S( ^2 |1 C8 s3 h
UARTPuts("upp_prog_dma_i\n",-2);
( A: N0 a+ O8 t7 q* B+ d2 n5 a
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. F9 c; E+ `$ R
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 K( K; _* j" w: C7 y
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" j2 ]6 l1 Z. |- P2 ? {
9 q$ e3 Q2 [+ Q
/*等待UPP传输完毕*/
; _# q: M: k6 b* p! j: k
//i=0;
) f' {! U. N" j* f4 C! a2 F
//j=0;
( J* N" Q. h5 ?( p% c* h k) m
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 j" u6 y0 f7 Z" o# z
{
) L( j4 `7 ?/ o6 C0 \
/* 测试UPP传输的同时操作普通DDR数据
. G, X( O5 T( T4 }# T3 {1 q
temp
=i;
7 j5 O" \, I9 P2 z; Z' Z/ b
i++;
0 Y& l7 M* N$ ?
if(i==1024)
. q# e& A" E# K- w0 m" l
{
1 _0 N9 y4 v7 n3 s
i=0;
{& ~$ `2 S Y) P
j++;
! Y4 X( A+ k, X5 N% i
}
: m$ l) H2 c8 v, g8 O
*/
* N7 ]; ~4 u1 ?" j# U% S
: h1 i" }" {. h7 h
asm(" nop");
9 m6 ]6 \- t, B0 N' p, i
5 y$ z& H2 A% T/ Z9 i& A+ s
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 @; g7 t6 m: S. c
}
: k. p7 G2 P2 o7 U$ i* ~
7 r- T" v) T: G
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ i2 |7 t) r" ~
//UARTprintf( "i=%d\n",i);
4 s- U/ d7 E' v4 z- @' B# a
//UARTprintf( "j=%d\n",j);
, `9 I/ M, d$ J4 z
UARTPuts("Data mismatch in buffers.\n",-2);
" K; k) G5 {& f7 }; m& A6 y
if (upp_interrupt_count == 2 && upp_error_count == 0)
! K) q# I; U3 E3 F5 ` u* l
{
8 s3 X/ m0 m: n# I, Q
for (i = 0; i<upp_frame_size; i++)
I: M, n2 z/ J9 D9 @' r
{
0 Y2 e8 Q' d' W# K/ C: y5 S5 x
if (upp_buffer_a
!= upp_buffer_b
)
* ~: d: ]5 K9 @1 {
{
. D5 r) i& R R, f" H" @. q9 `- E
upp_error_count++;
% h4 ~4 e! y* N/ P
}
4 Y2 u6 [2 v8 n3 t, W0 h6 z4 W
}
) A9 L; v" g% k- Z7 O
}
) E1 U+ u7 G0 z& _$ Y" Y
6 F& _, Q8 I$ U$ e
/* 报告通信结果*/
6 f r# G% Y3 y6 W: r6 M9 {
if(upp_error_count != 0)
' g9 V. G C* L
UARTprintf( "upp_error_count=%d\n",upp_error_count);
" `3 t4 _! [# _ v+ A
else
/ I! m. O: Z) n/ V7 }
UARTPuts("uPP transfers complete!\n",-2);
; K7 E( @4 E- i
& C7 o) q9 |9 }3 t0 g, T
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ Q4 X4 ]' H R
UARTGets(ch,2);
2 ]- u, x1 ~: G$ M0 Y: f
UARTPuts("\n", -2);
5 p% ] Y# {7 h& z2 G( s t
3 ?/ V4 A9 _' d) `" n; N: m
if(ch[0] == 'y')
+ w3 Q9 e, x! Z' ]9 a% r: u
{
# t6 ]' N0 I* c; ]: f+ _
/*打印全部读到的数据*/
; u- z+ }( G% @
for(i=0; i<upp_frame_size; )
9 {; I' D' f1 u ]) f
{
4 o0 {) E5 e; x) E' u
for(j=0; j<5; j++)
# o6 o" r) h& }
{
+ k5 C& t& K0 E; R' ]. r
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( v" D; t8 ] u
i++;
+ j. n4 Z, N1 b
//if(i >= 4096)
$ N- N+ R4 ]1 e. F$ I5 X0 G
// break;
9 w+ I* l% W% r# |) j# x; t
4 X2 J: z8 B! U6 n9 s
}
7 I2 ~3 f7 K7 M& {" f
UARTPuts("\n",-2);
6 U$ Q" I, [- U
}
) l4 \. u8 J G. {# i
}
; c1 r, P3 S: {9 j* X
, R- G; f+ q0 T% }5 v
}
: t2 U2 |9 J" W! e$ j
S% q& Y: \8 H+ {
9 F0 z9 L6 @; ?; d( Q$ y8 T% z% m
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& t4 o4 q! y( @4 H2 x
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& M/ n+ M; E, u$ o
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4