嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" O# u7 b M; E
Void UPP_TASK(Void)
( W. S" y! l: {+ Q2 _3 u7 A+ y
{
( s4 m S- P9 b2 q' _' F4 E
( L; v# D0 V* e) D( w3 d# c
int i,j,k,target_int_count=2;
a R2 L. T, C- y3 R1 B9 h9 `2 ?
char ch[2];
) S) w; y5 V! @. S+ s- v$ ]
2 L7 ]. G; N* y7 X; _2 y
- r% q! f$ P; ^% _' G
$ H' W" h1 V1 {2 l& E
upp_interrupt_count = 0;
7 e I; F6 B3 K) d3 P
upp_error_count = 0;
Z8 D' ^, a6 _. p& w6 u3 P
& z7 b- z8 ]" P0 E* i$ ]6 R
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# ~' q, W. Y% z3 |. j& `
// Initialize data buffers
: |- f0 G, F+ M
for (i = 0; i < upp_frame_size; i++)
& G# E8 S9 t7 m- v
{
8 u* l1 d8 J- e+ v7 V
upp_buffer_b
=i;
) v/ \+ G% l& g# I
upp_buffer_a
= 0xDEAD;
9 v) ]# K, _1 i/ ]$ A
}
9 P) k) j5 d0 m& g. t- X4 G
: w5 A+ j- A! l7 A1 o& V; e
//for(i=0;i<1024;i++)
' h* e, {, j* p$ _& y! G
// temp
=0;
" u4 C+ k; } S# J
, d& E8 Q# {5 }4 g; X" k8 U
//UPPReset();
: W9 E2 R* u5 F% r8 U* }
/*启动UPP DMA传输*/
* D/ M: a# b+ [ b- T/ ]
UARTPuts("upp_prog_dma_i\n",-2);
. b4 n, t" l1 {; v' m
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: k+ e# a( S+ D- N8 f- a
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 I4 t# U6 [; l' k9 b* T! J# b
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, s1 ^( a8 J. K% U3 t, [% x: r4 x+ u
6 a& c& m# C5 q/ n! p4 N) z" z
UARTPuts("upp_prog_dma_i\n",-2);
0 d* ^. B$ ?" U$ e* _
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ P7 k, w& w% y7 P' G2 E2 p
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! |2 F8 s# d6 x% c3 u3 O7 ^& I/ {
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* _$ G* c, T% ?! c# |0 d7 c
0 ^9 U, x6 m3 J; b W
/*等待UPP传输完毕*/
+ |0 G1 y0 l: t; e& r
//i=0;
3 ]0 ~5 U8 i6 j3 ~( h
//j=0;
! g+ z, r0 s: c/ J( U3 A" T/ Z
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' _6 X+ `; q* M& `0 N% \: T
{
% q, I. l: Q& b1 t9 A% Y
/* 测试UPP传输的同时操作普通DDR数据
4 O0 l6 Q! M- _9 Q. x. Z; K* F
temp
=i;
$ f. O1 ^. ~# a: N. y
i++;
; M5 {2 Y4 W/ K; M
if(i==1024)
8 w) c) v1 L) s: W6 e2 D+ B1 C6 _; C
{
, d, X" ?3 l! G& I4 z3 P
i=0;
# O r3 J c7 {, W5 H$ N0 x3 r6 S
j++;
7 Z8 v7 T4 \; J! _
}
* `2 z k/ ~9 Y$ g" f- @5 q& T8 S2 C
*/
9 e( X) g& j8 U- u% H! `9 u
* g, A; ?1 a9 G9 z
asm(" nop");
) e4 G4 P/ g* a7 \
& P% E- k) Q- I! @1 n
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- p% U' W: O& Q' @5 g
}
; o, j( D2 G6 d
8 z7 B8 K4 I2 B/ X
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ u6 \: ]0 E2 u# }+ h, m1 X* R" U
//UARTprintf( "i=%d\n",i);
3 s5 I7 y2 D% F+ X' H- c
//UARTprintf( "j=%d\n",j);
7 J0 Q; R3 O$ l6 S" A6 q
UARTPuts("Data mismatch in buffers.\n",-2);
) u+ T( {1 z1 p) i$ L2 H. c& G( m, {
if (upp_interrupt_count == 2 && upp_error_count == 0)
% e8 F/ a$ B% ~; A
{
2 j/ p0 b5 {, g `/ Q- u. f" e4 K
for (i = 0; i<upp_frame_size; i++)
& ?% s! O& O3 ]& m" y [0 c
{
6 z$ Z5 \- t7 D5 [1 ^
if (upp_buffer_a
!= upp_buffer_b
)
3 W& w$ S7 }" v
{
$ Y* d3 S5 o7 G( [) _# l4 m1 v
upp_error_count++;
+ n7 O* z9 R* l
}
! C: N2 v. U$ c( Q' e
}
. q' v! e2 M4 \' Q* B
}
! Z( h& v7 U, j/ R
+ ~. ]2 }+ J/ y: m
/* 报告通信结果*/
/ ]5 u. @% s0 W7 y3 K( @2 ^
if(upp_error_count != 0)
& @; _9 ?5 Z" e3 J
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; _, O6 D$ _; @" h' K- a; z
else
; u4 \3 p/ |+ ]1 ]% b
UARTPuts("uPP transfers complete!\n",-2);
) m& A9 n8 p6 l; `* H5 Q8 m
- h4 T' d' P/ e) h: |
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 D3 ~3 m& z+ c8 P3 m
UARTGets(ch,2);
3 C& _1 T& }8 V1 J
UARTPuts("\n", -2);
5 A+ z7 Z6 H& s$ D0 B
) \ T+ G, V% t1 q* `! h
if(ch[0] == 'y')
: h+ g8 c4 v3 l
{
: g0 U7 n4 K2 m* {: w/ i: g
/*打印全部读到的数据*/
" u3 z0 K4 I& h6 j0 c e
for(i=0; i<upp_frame_size; )
: F; p$ H: M! d
{
! a2 \; j$ o6 ]/ y3 A. M- j
for(j=0; j<5; j++)
# |4 ^9 c3 Z9 N+ y. p4 P+ o
{
; s% U4 M, A# E& N' f+ C, w
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. A2 g0 _6 @6 j; d
i++;
) g1 U: A5 |( Q6 j
//if(i >= 4096)
( Q6 U% W5 ^* j
// break;
& @ Y8 R* |5 P
( f2 {( U8 y) D( J6 ^2 m4 C+ z4 I6 r
}
# E1 M, [% M* e8 I
UARTPuts("\n",-2);
% ]+ t: p9 `1 p/ y" l7 [4 } l
}
2 I2 |/ X% T9 z3 V. F* g4 I+ T9 O
}
/ v" p* Z3 P: ^( p% r
0 D2 O0 M7 I4 L& I3 u4 m( s" e: w' [
}
" N% G1 l( A/ K' M3 ]" V
. ]! K: B' ?" ]# a
" L5 Z# _3 I7 i. [7 o* e, @3 p. ^
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" U' |8 X% B' H6 D9 o: i# J4 c
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 J/ H0 S- y) t9 j
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4