嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
. i! z( m* l c7 v; X% B2 t
Void UPP_TASK(Void)
8 n7 n2 b' h9 v S
{
4 I/ f& F) D2 [ Z4 }, \; v
# i3 ]* {2 i, X( n6 o
int i,j,k,target_int_count=2;
3 B7 E+ k" e: H7 r
char ch[2];
. M. t+ }5 o' v8 \4 J
2 |9 e! K, O. m1 M+ }+ I) m6 I
' Y1 f2 E, I+ N+ L4 Z& j! N
+ D. p0 I1 I0 O1 Z. _ v' {+ ^& S
upp_interrupt_count = 0;
% I- R. ?$ e, L/ \% p D& l6 ~
upp_error_count = 0;
) t& C' W" {/ X! t
* A# o0 H0 F: ?. J. y, ^; m, ~
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ |4 e( ~6 [$ y' h. I
// Initialize data buffers
8 A+ ]5 p+ D( z0 b
for (i = 0; i < upp_frame_size; i++)
4 i+ M: j" [- D1 t
{
2 _3 K: x. L7 ?" o6 T
upp_buffer_b
=i;
6 Y: Z/ R, ?6 I" s, _
upp_buffer_a
= 0xDEAD;
) S7 O) G. A. q5 H7 _7 z4 |
}
/ j. a5 f/ l! H9 H
9 u0 a* C; K/ t
//for(i=0;i<1024;i++)
" @- t" \) ]# Q
// temp
=0;
+ }7 i/ N V% G* n1 e' x6 |
2 b) _3 _9 p) ?7 i/ E- q
//UPPReset();
' P4 W# [3 m, h/ J+ j/ Q' V
/*启动UPP DMA传输*/
8 j7 V$ n8 Q4 ~+ U
UARTPuts("upp_prog_dma_i\n",-2);
; J- A# J7 l# K: I$ a! a' c+ @
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 n7 [2 O0 s! g$ U( S, k7 n5 _: l
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ i7 R) e/ H! [, L5 A
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 w5 U% X% K3 j4 h* L/ ~
8 l8 i7 ] @ P8 D7 V
UARTPuts("upp_prog_dma_i\n",-2);
5 u+ g; F' \# M& u
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! z$ o6 g; x+ }& |' w
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( F+ S$ u8 F; s4 V5 `2 Y2 o
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 W$ S( z, D1 J* u9 Y% ?$ q
! B; U& J+ G6 n/ B L
/*等待UPP传输完毕*/
% {: g% k! t! S0 A
//i=0;
: O5 m( m! R1 E Q6 t6 x' J9 N! g
//j=0;
" ?6 z+ v/ A M: T- G+ d9 G
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ ]$ Z- f' G6 I0 j1 n9 w8 U
{
l; x! ?5 m3 a" b* ^4 i9 g
/* 测试UPP传输的同时操作普通DDR数据
" v' E, y+ H* b5 s+ U( M% }
temp
=i;
& U. v7 i, D' h6 g
i++;
5 w# K2 j8 ~0 u% ]+ c" x
if(i==1024)
8 w9 T3 c/ |6 l# d7 y
{
! j1 h% ]& ~) r' \2 ^" n, B
i=0;
: }0 a+ C/ k/ y. k* u2 X* E
j++;
1 N* d' u/ F! u/ q2 `( e7 F. a7 F
}
4 @" T; d: P& X" t
*/
( G. f* L/ [! S- v! |0 Q
3 q5 E* D9 ]$ d p
asm(" nop");
3 X" i" x6 I o8 E9 E [
5 z4 e/ g; W$ I# E! ?' V
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& g. T* n8 T" b; S5 H; x& [
}
/ M/ B# ?4 H% d
2 J8 }( T; x, q- {( m8 f- W: Q1 C+ V
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 n: C' h3 o5 @( b$ p* V* n( x
//UARTprintf( "i=%d\n",i);
8 R* m9 @& c2 L! V4 I: s
//UARTprintf( "j=%d\n",j);
7 P( A$ [, F' d; a4 t
UARTPuts("Data mismatch in buffers.\n",-2);
+ U* `' U* I$ g" K4 ~; Z
if (upp_interrupt_count == 2 && upp_error_count == 0)
! H5 i3 R0 g2 }/ s# f5 v4 h
{
: e. k# H/ k3 Z+ l; N& u
for (i = 0; i<upp_frame_size; i++)
( @4 T! f3 k2 H* Q$ M
{
. ~: a7 P: [* y; p. ?; c
if (upp_buffer_a
!= upp_buffer_b
)
0 a4 m" h9 P0 L) D
{
8 Z! {; M5 R3 o- x9 V; f+ I
upp_error_count++;
: I+ j: l/ B; N
}
8 n4 R0 z' q& L* g2 G8 P, y7 u
}
% O" x! _3 q* y s, p
}
- K5 C* p4 a* i
; `( \- O+ I& U5 ~2 V
/* 报告通信结果*/
/ {+ ^7 I, v3 S- u( J4 K
if(upp_error_count != 0)
1 q% V0 ~+ X' Q c& H4 G
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) q) Z- `: P" w) o
else
, l; M, G8 J" N8 a5 ]
UARTPuts("uPP transfers complete!\n",-2);
3 o9 ~6 V$ ]! M. F. k5 q
1 G7 ?1 X% d3 }$ O! G" q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
3 m4 t T( Q8 h0 V, }' I' Z
UARTGets(ch,2);
5 e2 r5 n# B1 I6 q
UARTPuts("\n", -2);
1 F& t7 {% z" W: _" c* x" n
$ f( F) P/ b: v' _; f0 X
if(ch[0] == 'y')
& Z' m: @; a3 s. E) C q
{
$ b. q/ ?" L1 t& u0 X- f
/*打印全部读到的数据*/
: j& c. v% \$ P* E. J1 c
for(i=0; i<upp_frame_size; )
) K2 c" P2 F$ O$ y; n
{
* ^3 L* m& T6 J, |* d' H
for(j=0; j<5; j++)
, W0 f6 ^" ^2 {+ |" f7 v, b! M
{
- m0 o4 A- X9 y1 U- |
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& T6 L: i! b+ w! y' E( ^' ?# G/ l
i++;
' o5 @3 y9 [9 Y8 U6 T- r+ ^
//if(i >= 4096)
2 G+ u% y2 k; q
// break;
- U( p) w3 h- o/ x- I! H
- }# }& H) z2 q+ v" w2 a
}
" ?- k4 `6 N0 t4 ^' @
UARTPuts("\n",-2);
4 V$ }# Q8 s' Z( v
}
# p! c6 w7 Y7 x% h
}
5 P$ m2 c. m/ ?/ ^
" e U M, |6 K% o! Z
}
3 p$ O4 P! t4 D. w% v" f$ M+ f" f
! s3 y0 H1 Z0 ~
- x0 L/ @# l( H5 \2 z4 ?
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" _1 Z! y# c+ H8 N9 _
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 M+ j4 P& }/ O: J3 J
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4