嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- D6 O# s( I1 ]) f# I
Void UPP_TASK(Void)
6 S% {/ O" [- k' y( |: I J
{
+ Y: N# K4 a1 D4 e5 ^* s, T
& a3 }1 G# i8 D% {
int i,j,k,target_int_count=2;
B* ]. s) z- v9 h
char ch[2];
$ z# s+ Q& X" Z- D7 t
4 @/ R6 Y# {6 u1 i0 W
& ]& @" Z3 x4 H2 h1 o0 I2 D" {- {
2 a0 q- l# B( t& m5 F
upp_interrupt_count = 0;
) ^$ O: j4 m6 I' G' g# z4 I# S
upp_error_count = 0;
- l) V: e4 ^, }( j3 g# Y& L4 }
! u$ Q2 D. B9 b7 R8 {
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ @& j( A L3 \4 ~
// Initialize data buffers
* r) V9 b5 Z' n' |! N
for (i = 0; i < upp_frame_size; i++)
1 V4 o4 x/ S6 \6 W' e( s2 ]' S
{
7 T; y: V' U2 Q: J6 A) p
upp_buffer_b
=i;
1 U4 V# f: q, \* L
upp_buffer_a
= 0xDEAD;
3 d9 O3 I3 ^. B9 x9 y
}
# U* @0 O f2 ]
8 P, O5 z7 u5 J" \
//for(i=0;i<1024;i++)
' o' C" G' l4 V
// temp
=0;
" f& n9 |0 J0 F% S) }7 d
' L& y3 Y- l8 |! p; V7 ^. X5 n* W
//UPPReset();
% y" s0 X! w$ \5 J' t+ c) @
/*启动UPP DMA传输*/
, i# b: }5 p( ~+ w- _4 ?8 K2 Z' b# F
UARTPuts("upp_prog_dma_i\n",-2);
, W5 E r t) i* q$ T6 ^
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 ~! q6 p2 E6 b" J
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ {5 e1 U( e; n1 U
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 W6 S9 q, V1 o. f3 I K& q$ w
! o' @) N# t$ v+ Q- a
UARTPuts("upp_prog_dma_i\n",-2);
" k8 n/ @9 F6 Z8 M2 w( ^2 E% O
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ |( n8 v* O, [/ q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; F" E8 b2 R' a2 c% m( @# k# H
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# o8 m7 V, Z# H. C) k) _
" N- m" w( T0 F: E5 n( Z
/*等待UPP传输完毕*/
9 W1 u; j; P1 }* Q1 u+ m0 r
//i=0;
6 K4 H- q9 y; [- Y8 q0 }
//j=0;
& ~; M1 D+ i. c, b# }, H. l
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( ^- n3 q- n5 z: {& I
{
8 F4 \$ Z8 Q2 L: f, v" i9 |
/* 测试UPP传输的同时操作普通DDR数据
+ W p5 b5 L/ d
temp
=i;
) L2 ]5 _- M8 R+ W) U9 H% I
i++;
7 h' T: D* t2 g+ j" p3 s" w- k$ G
if(i==1024)
3 m, U: Y0 o2 Y
{
& i# q9 q" c, X( f4 i
i=0;
( r2 c w) _. S L1 |
j++;
5 e* N1 s/ F0 A# w2 E0 m
}
$ `' \2 s& b! ~; f) @: i& D
*/
9 F: ?# a2 t& q4 u5 B( Y
( z; Z; |$ _0 x; B5 [2 {
asm(" nop");
9 F$ t, w! x' F8 q2 }" ?% m, K
3 {2 [: p: ]4 O$ P
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
}. U+ l+ c* Y3 E+ G* s
}
6 t5 y, ~% B0 M- I `' d
5 U7 M$ v5 }7 F1 f, m8 U
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, Y* m# N: K6 g
//UARTprintf( "i=%d\n",i);
" T" K4 y6 q4 \9 a) {# {
//UARTprintf( "j=%d\n",j);
4 c9 d" q' M& `0 k k
UARTPuts("Data mismatch in buffers.\n",-2);
2 p* T% T9 H4 K# B8 `+ s5 ~% G
if (upp_interrupt_count == 2 && upp_error_count == 0)
: w$ z5 l# S+ k8 P g3 V
{
+ N9 w/ m# m0 {3 y( j) l
for (i = 0; i<upp_frame_size; i++)
I" ]: H C. c: s' c, {( x" U
{
3 z5 Y0 i% L$ ~* Q7 y% ?# t
if (upp_buffer_a
!= upp_buffer_b
)
% c7 `0 ]. i x8 p6 Y( X) o
{
+ R( x# t! B! p& ]
upp_error_count++;
$ C5 }* o1 T9 J6 i$ E3 F% B
}
/ p. o2 r5 k( C: v! b, X
}
5 {: y* @& L6 G% c' O1 W* ~
}
* S u% t8 a1 L$ H4 e3 ^/ N) n
5 J8 |2 j( A8 l2 f4 f3 J4 N2 ]
/* 报告通信结果*/
+ y! g0 ^( i- g, p% v7 r
if(upp_error_count != 0)
f. g0 C$ r% ~2 t+ t: r' ?
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; ?* b! t1 z1 @; c, ^3 a
else
' x) w, d; ^+ {8 w
UARTPuts("uPP transfers complete!\n",-2);
+ j1 ]+ K9 J% y- y* C; w% [
5 U, _0 o' e( s3 c X9 t. k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 B/ e5 `" R' B7 {, U8 P5 b
UARTGets(ch,2);
9 a5 Z: l% T6 t# j; S
UARTPuts("\n", -2);
* H; Q! B, T6 G* W; O0 N
) u" {6 I- U) X8 h: O7 R
if(ch[0] == 'y')
" d0 k/ E+ l+ m; E: u
{
* o6 U: |/ \/ i2 l+ }4 w: u
/*打印全部读到的数据*/
- n( G1 g0 W. U
for(i=0; i<upp_frame_size; )
" C& a( b' d# y) s& ^
{
7 h5 J7 d( l8 G# y8 X( e1 ^
for(j=0; j<5; j++)
1 S6 [4 ^# u$ ]7 t
{
$ ]$ w; M( T9 F+ ?
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. s: P" h( |, m# }! T; x' U
i++;
. O" I! E: D* g& ]
//if(i >= 4096)
5 q/ S. F0 \/ b% f- P8 J i U
// break;
. w5 N* J8 L9 y/ W% M
; T, K" x s% X% }8 Q
}
. Z2 _$ v2 N2 m( P. Y- b
UARTPuts("\n",-2);
/ O, w3 q- y B
}
0 O4 A% L% Z9 s. Z1 x+ D
}
/ ]6 [* \# |" Z
; q+ Q/ h% o+ c8 s
}
5 K: [# J o& R! A
- X/ N" Q+ r# _! L
# c) F, y) |# ?( E' e7 G
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ l8 x0 r8 w8 a" E/ @1 [2 r6 e1 F
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 A6 W) d" Z0 I0 N
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4