嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ O! F/ [; f! K- s) e8 w
Void UPP_TASK(Void)
3 t( W# n' E( R" B/ h4 @( h f
{
: M$ H' t6 c( E7 J# F* G
* P* M+ S0 T W9 |0 I
int i,j,k,target_int_count=2;
, L" u5 I$ t8 w( h, Z
char ch[2];
( Q4 F9 i& z* }4 q& H7 e8 I2 V
+ c6 e7 j- t- X
" H1 w& d9 r" E B- y4 y: _/ a
& T) p+ r0 M7 _$ H& C
upp_interrupt_count = 0;
1 M- Z0 P( k3 l$ y' a+ I T
upp_error_count = 0;
* M0 O, S& {9 V1 f
: Z; M/ {$ h e0 n' F& _3 M
UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 V4 W& {/ i% ^! k3 N2 b0 ?3 ^
// Initialize data buffers
" }0 e: D7 J0 k8 k9 w* N
for (i = 0; i < upp_frame_size; i++)
' I' W4 u I$ d( a. Q
{
3 Y5 O4 E7 v1 ^' [4 p. S) E
upp_buffer_b
=i;
) i& F1 O, {/ e1 j& |/ g) ?
upp_buffer_a
= 0xDEAD;
5 _$ I4 m9 K2 U& z7 E, {" O8 \
}
d* V/ {3 h$ R4 F
% z- H* s) o9 I6 m- J" w
//for(i=0;i<1024;i++)
b7 n+ l2 J" |( f
// temp
=0;
J9 R# W% R( M; |8 A
/ Y8 m! f9 F' Z L' ?
//UPPReset();
3 N% I; b/ ~* @; n @
/*启动UPP DMA传输*/
6 n2 U8 l, d7 c4 R7 a% h) D# o
UARTPuts("upp_prog_dma_i\n",-2);
, z6 z9 H' p) B$ W% X# n
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, V: K! ^5 ?/ {9 n2 I0 C
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: |4 M" g4 f1 [! y
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 \ \2 I3 X3 K% q, ^
5 Z2 I# }# k, a4 X
UARTPuts("upp_prog_dma_i\n",-2);
* K# e* d8 W# r2 v( [% `
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 A, I) @; O8 j- X
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ R0 l! K& O7 A; P, M
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, O4 [" {6 p% R+ Q: C% X+ z
' M1 y. N# I' Z( b! R3 J6 @
/*等待UPP传输完毕*/
$ t) j0 b0 P$ e- T: t8 H- i1 u' B
//i=0;
6 c( W6 U9 m, S& V6 I3 d. y3 a% ~" X
//j=0;
9 h! `6 h& H3 W' x s1 a6 o/ s9 B
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' R/ R' j2 j) |3 N' G" ?
{
) q- c+ l5 I# ?4 H1 F9 ~
/* 测试UPP传输的同时操作普通DDR数据
& F2 f/ e+ i! A8 S
temp
=i;
0 k, `% m ^' q0 c( v
i++;
1 E6 @) a" \3 S2 o. _
if(i==1024)
3 _+ u* K5 s/ v$ Z& m+ p
{
# C! l6 w% s1 W5 v9 Q
i=0;
. S& D! C; k# i5 H6 v7 K
j++;
9 I3 p @$ U& D; p
}
$ z; z7 t; B6 F( O4 |
*/
0 t3 y: K- ?7 f9 Z2 s W9 [
9 X7 ]; R! l0 B8 j8 [
asm(" nop");
* n5 I2 G, u9 q, o- w! f
: ~$ Q6 c7 [' z& |5 c: R
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 T' I- G' R2 d4 n( F( ^) `
}
' B4 q0 N5 h4 y6 t
* U2 }5 V! ~9 e& N P& K, f, I
/*检查UPP传输的数据是否正确 (loopback modes only)*/
3 e9 [5 _( U) V
//UARTprintf( "i=%d\n",i);
, _# H8 Y: X3 `( w, l
//UARTprintf( "j=%d\n",j);
; p# s( z# I( P/ N4 w: K
UARTPuts("Data mismatch in buffers.\n",-2);
3 i0 P8 S: O3 b# P {6 c- k
if (upp_interrupt_count == 2 && upp_error_count == 0)
# c) J7 j7 M- r# X/ T6 c
{
0 f) w$ C( a0 v( |: F
for (i = 0; i<upp_frame_size; i++)
# z. t/ B4 D" Q1 C" R
{
+ C& f+ B" c1 w/ c5 M4 q0 f0 D
if (upp_buffer_a
!= upp_buffer_b
)
' A- G+ C$ Y/ I2 S# A" w( o# i
{
+ F+ J# E6 \, z/ g e; s4 ?
upp_error_count++;
0 Y2 v, b$ A k, c
}
, G4 j/ s# I+ K1 g
}
6 P0 V8 Z1 T9 S7 @# Z% Z
}
, U- G9 V- c! ]
" V( y% J- R) w) S! P
/* 报告通信结果*/
$ y! q: u* L$ ]1 \/ q) }
if(upp_error_count != 0)
1 l, h5 q2 t0 ^9 u2 y% m, ~
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 M8 L# R' n1 g$ G& r/ J
else
, u$ \8 t8 r9 n% ~) r; R
UARTPuts("uPP transfers complete!\n",-2);
# h6 q5 v6 @$ a" Q1 n9 v
) k9 f3 q1 b3 I( R
UARTPuts("Do you want to print all the data?(y/n) ",-2);
1 j8 q9 b: [, @$ {
UARTGets(ch,2);
% }- p$ \' @- V2 U$ Y
UARTPuts("\n", -2);
5 [6 E$ R9 ~5 @' X7 J3 D
9 q# ?$ W- [4 t+ S8 }
if(ch[0] == 'y')
' f" G1 k+ O9 J$ k" l
{
`7 b0 w( c2 Q2 }+ w
/*打印全部读到的数据*/
) O" @* o3 Y4 Z" Y
for(i=0; i<upp_frame_size; )
, z/ r7 B" U4 W& x% m$ a% k
{
3 ?6 j: {3 t, Z; o4 h: p% u
for(j=0; j<5; j++)
) A6 d' V2 }1 F0 v" R3 Y
{
0 c1 a+ s* t9 R% h. i2 q) x
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
: p/ x6 O9 v0 j/ @3 p
i++;
8 `* m& k5 F# P5 r! T& ^
//if(i >= 4096)
) }5 N6 b; Z( E& j1 m+ L
// break;
" V) ^! j6 C1 ?; T! c
* m d# ?' i# B/ [) S
}
) c: b9 x, _$ [. Q- o
UARTPuts("\n",-2);
8 h4 y* t5 v. I4 T) I
}
! P: F2 U0 ]$ t* I2 `
}
( X- E& ?1 |4 J) d6 p4 v
- M7 v' V' r% D' C# V
}
8 Y' }9 x- C- a! O5 V) }
" I1 C' b- r! G1 K# o; G5 w' d! m
+ h' p+ l. o) m# v1 T# F6 z
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- C; t! g. T. W7 @
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& d' r+ q3 K: y6 L
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4