嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ P9 c. E. L" g/ B W3 O: g
Void UPP_TASK(Void)
/ y0 d( {% B" k3 m' \1 m' ~
{
+ v! ?& _7 `& Y, R% H2 j8 {
; P! g" {9 V, _
int i,j,k,target_int_count=2;
4 M K) E, _" c0 H7 {
char ch[2];
5 V8 s4 ^& T5 C% H; ^8 {
8 x9 g7 k; `( {+ N( `- I, T* k
7 E6 y" k; r" n3 {5 c( l
$ ^) t# k; \1 C3 j: l" n& H
upp_interrupt_count = 0;
' }3 u3 u" f1 s2 O
upp_error_count = 0;
. U0 H4 i: Z; T# t+ O$ D! W5 J
3 Q6 ]/ K8 c# b, z/ X7 s" O/ b* a4 w
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 G/ N/ O, D2 \) G4 b+ s% M+ \9 H" q
// Initialize data buffers
( ~, W* J0 |7 T- W& S% E1 C, @/ I
for (i = 0; i < upp_frame_size; i++)
, Z9 w! R, {3 A$ Z1 r
{
+ d7 L" [. Z! N0 M8 l2 c
upp_buffer_b
=i;
6 }* u2 d& W" V. U3 p7 H
upp_buffer_a
= 0xDEAD;
: A: i- S" w7 G4 M: r; D' r* u
}
; G% R* i9 j* h1 u2 d9 ], @& B
5 Y6 w+ X2 s* U
//for(i=0;i<1024;i++)
+ N* n V2 D. [, |3 E5 s
// temp
=0;
6 c8 \' l$ [0 u6 W$ x* ]$ w0 W; H
1 _1 H. T+ u# [4 ]
//UPPReset();
7 e1 N& F* q% l% h0 G4 M
/*启动UPP DMA传输*/
/ h8 c7 E& `: U( f7 ]
UARTPuts("upp_prog_dma_i\n",-2);
) M# w- J8 L# Z i ~
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 A2 x, v! P+ \" O. E
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 K1 s4 g4 w2 O/ |. J
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# s0 z, X0 Z$ v( p4 X" c, w
; v5 t0 b" s6 @4 J
UARTPuts("upp_prog_dma_i\n",-2);
# M/ O* ]0 {9 l$ k7 d! U. h8 p
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( A: J' a0 M5 r8 @5 ` [& _$ D6 S
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! c/ n7 ~2 E9 t, N
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 V+ p. m. D3 @' B9 r" U
& o) w# N0 V" [" A* V/ x
/*等待UPP传输完毕*/
& J) T& ]9 U. T+ G: z3 o" x$ h
//i=0;
0 {$ p9 k/ ?$ G: w
//j=0;
& L3 m y( \) t7 i( L/ K; b
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 L/ `* l; X9 T
{
) M3 _8 r; Q1 X3 c. C J2 J
/* 测试UPP传输的同时操作普通DDR数据
& j1 a& _6 g: O8 R) M
temp
=i;
* N4 g) s, m6 x1 e8 ^* \
i++;
7 \6 j' I. Q2 I6 B
if(i==1024)
2 G( N' u: D$ i
{
7 H$ o$ H. w. E( y; _; r
i=0;
$ @& a6 D8 J0 I- b
j++;
6 H3 i) E+ M3 S4 N
}
1 D% c0 a3 v; h8 Q4 r) d% T& t
*/
0 |2 B6 Y, v' Q! i" G
& ?$ U& k3 A% |1 ~: Q% c
asm(" nop");
, K+ f# k, b4 A9 q
) b$ [8 N; i4 J. u
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 }9 ~: ]1 j* {4 [% [1 P* m
}
7 d# h6 U/ o7 d7 X! K
0 M& o; e0 U$ b! s
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 h* p. W4 b* T4 @8 F% s
//UARTprintf( "i=%d\n",i);
0 n5 Y6 m+ |. d( r1 c; j) W4 ~
//UARTprintf( "j=%d\n",j);
. f- v1 ^" L( N; R* F1 C
UARTPuts("Data mismatch in buffers.\n",-2);
% I7 V) f: M6 O% s5 D* b. n
if (upp_interrupt_count == 2 && upp_error_count == 0)
) {$ k7 h( Y/ {# A
{
9 k( v- T- {0 i) v9 S
for (i = 0; i<upp_frame_size; i++)
2 B% `" k. r/ |. w$ p2 w" m
{
' J! o$ [$ D/ A7 L1 U
if (upp_buffer_a
!= upp_buffer_b
)
) D& s p+ v0 X! Y; l
{
3 V O) D+ q i( Y4 p
upp_error_count++;
/ t% X* @. G& a& v
}
3 m+ `2 Y. r# {/ r+ k$ T0 \/ ]
}
T$ ^; M+ K# I9 c8 s! z
}
+ Y e7 q% B+ G0 G w
2 Y7 M" D4 X/ `/ }
/* 报告通信结果*/
( A4 Z' g0 ]1 M( c- Y9 S$ z6 Z
if(upp_error_count != 0)
. x! E! q9 e# c: p, |. }
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 _1 z+ o; C; p# t+ C+ y
else
$ I& i/ l7 y* O) y0 h1 p3 ]$ c
UARTPuts("uPP transfers complete!\n",-2);
: W$ z! F ?( F! ^5 x% l+ z
: g6 f) ^4 K: j# L, a6 o
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% M. z$ ^# R0 ?
UARTGets(ch,2);
& c: X, p4 m. t8 D1 @+ b8 H3 c( d! g
UARTPuts("\n", -2);
5 A4 O& E' f6 k" M1 ]
, Z- l7 F6 L) D0 w/ A5 n
if(ch[0] == 'y')
( F$ ~) r% _! n* v$ j0 Q U3 h0 l
{
* C+ n& T% F, X
/*打印全部读到的数据*/
5 i5 q( s1 i6 T/ o0 k% d& a y
for(i=0; i<upp_frame_size; )
6 B! X0 k; h# H3 m! E
{
& K8 [6 b( z0 I V r7 E+ }
for(j=0; j<5; j++)
8 Q4 |0 W S4 W5 i7 c
{
5 w: t8 E- k7 Z5 e9 p) a
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& s$ I5 n! C' K! m: e7 P& l
i++;
6 q) R% e! p2 F( I! \% J$ P0 V
//if(i >= 4096)
/ Y/ O7 j0 |. x, n2 Y
// break;
) _$ \% {( P) S( Z* {7 ~
8 h" ?) u( e( e. X) Q
}
6 ^+ y+ y9 T& v- c0 ^& [* o
UARTPuts("\n",-2);
5 O9 z7 I. J2 s6 C
}
% K Q* f4 Y! a; `4 v! D% K0 ?6 q
}
" E& B8 p# e1 g# ]8 G( E
$ b/ P h! C) h# ~; N
}
c+ _- x8 M4 h; E# b. u& S
% o7 f% [* I$ ^: C, F- }( Y+ s8 _: p
1 f% s% i3 n) M; V5 W- b
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 }4 ~: m4 m3 Z# M$ T1 b, ^$ z; Q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ }! v* A6 ?# n/ c, w1 \: n
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4