嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 O7 P: ~+ G8 ?) E T* C
Void UPP_TASK(Void)
- B `) h) d" d8 m+ p
{
4 g& h, u+ I E' A; V* ~
4 c1 a2 w: _7 q. g
int i,j,k,target_int_count=2;
) z1 w; [' |/ z0 ?7 m+ w
char ch[2];
0 F' e/ E9 }( M; J
: U' ~7 O7 @9 b2 a
+ h& \0 t6 G. T% f
; y" n. E1 E) x! @/ t, U
upp_interrupt_count = 0;
7 o$ _' t1 k6 c u
upp_error_count = 0;
! b: j: G3 {8 l
9 ^& o+ _0 Q: {! b
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; _/ l1 k2 R$ Z( }6 j6 I
// Initialize data buffers
) x: [ ^. A+ F$ Q
for (i = 0; i < upp_frame_size; i++)
' S/ e2 c6 D( f1 ^0 x
{
9 Y, t2 Y$ O. F5 y
upp_buffer_b
=i;
4 u, D( z. J: M7 d8 ]0 T w# \
upp_buffer_a
= 0xDEAD;
Y" `& x, Q1 |- g
}
; d" ^2 c2 j" B0 o: v H* D( t% q: d9 o
: y t( I A, J4 X' N7 G
//for(i=0;i<1024;i++)
/ ] J1 y7 Y& z' b0 e5 \9 m
// temp
=0;
2 b; @+ n* ^5 j
; S5 r! h5 i. h4 e+ F
//UPPReset();
2 K) [5 A) g( O0 ^1 C, C0 S+ E3 _
/*启动UPP DMA传输*/
! }% l3 E. g; o2 ~/ @
UARTPuts("upp_prog_dma_i\n",-2);
9 d- C3 O( E, @& G$ `- t
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
0 \/ R! _% x3 J# g& E6 S" h
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 ]. }, k$ |9 ~8 Q' N* J4 a
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, H" x6 |! f; J4 d1 B
% i- C# E/ o1 w2 W
UARTPuts("upp_prog_dma_i\n",-2);
3 @& |; ], d& J4 t
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ }9 f' l8 p2 J) n
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) v- [5 f) c! v: `
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' }. M6 o0 y2 M
# O2 K1 }; o; F& E7 `4 H; {& M
/*等待UPP传输完毕*/
2 `. {& Q, X9 p/ H! p
//i=0;
9 H+ G: | H7 ? t5 n
//j=0;
% Q* N; a( N1 l# D8 s7 b6 X9 Q4 o
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: [( [# I( l& ]
{
& c5 I |* [7 b. l9 q8 T" s, {- N
/* 测试UPP传输的同时操作普通DDR数据
# B1 W- l0 ?* s% q
temp
=i;
8 p7 n+ O) n" n7 S( g" y! q
i++;
7 @7 S! R! W) u, X
if(i==1024)
7 [$ r' R! ]; \: o0 T) I; v1 v. q( h
{
7 L F3 }/ `, [; o
i=0;
/ P. e$ i) [( L \$ |/ j& `
j++;
& _0 n+ x: g G* R. |: a
}
( G; y8 ^% q1 f) i
*/
% _/ }( Z5 F, [* K: ?, M
1 l8 C, W1 H: h a
asm(" nop");
3 Z; r) B( G( D! q% S" [, h
$ f. M& W2 T8 q( @1 f
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. T, T- ]; p: `% h$ T1 K' \
}
; h5 M6 G+ `5 N' z
+ h: f) l( M) s
/*检查UPP传输的数据是否正确 (loopback modes only)*/
! N# p3 }( O# o+ C- W
//UARTprintf( "i=%d\n",i);
$ }5 \3 K0 G+ f- l, v" b' w
//UARTprintf( "j=%d\n",j);
- o2 K& m* ]3 P7 w
UARTPuts("Data mismatch in buffers.\n",-2);
: k% Y% m! P: K, e% K9 D* M
if (upp_interrupt_count == 2 && upp_error_count == 0)
# e% W8 e8 I3 }$ {7 T, A9 _. W) Y
{
* m. S d) Z/ z, }$ p1 p
for (i = 0; i<upp_frame_size; i++)
- h' @) j# R4 G1 e" v
{
% ^, c0 P' _3 |) K8 _ [; ?
if (upp_buffer_a
!= upp_buffer_b
)
' f! N: S7 _ T% [
{
' t u7 Z H5 r+ ^: o1 p5 R
upp_error_count++;
1 J; @! C$ Z7 h; I- D0 ^/ H
}
6 h+ c( ^- x( s l! t$ h
}
) j9 r# T6 I/ b+ i/ T1 Z. e
}
! A8 Y2 C* W. t, l2 A
1 Y' X% e. B0 i: P$ j ]7 Y
/* 报告通信结果*/
* b7 q! {+ N4 ], t
if(upp_error_count != 0)
: H& u( ~% V$ U8 w
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 e2 H3 ~( {! h' K' o7 T
else
4 H! [% @. m. T6 I, K3 [
UARTPuts("uPP transfers complete!\n",-2);
/ B5 {8 v3 X6 m$ T0 D' u1 v6 D
& l2 b" V" n6 ?8 E, i9 ]7 U: q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
" a8 A$ ?2 _3 f; z: q1 G, X( T
UARTGets(ch,2);
, O+ H. N( Z& _
UARTPuts("\n", -2);
! z, U% A$ U% i( J& T$ b! R, t
) t& e( n3 u* ^2 U, [, |
if(ch[0] == 'y')
+ n8 h* }/ q0 ~) a! [0 i! ?- ?+ Z# m
{
. a5 t% u/ C9 ?7 m$ A, X
/*打印全部读到的数据*/
N8 V3 s: K# H) q0 [' S+ C
for(i=0; i<upp_frame_size; )
. S7 y2 }! y. Q& D
{
+ { E, |0 u L9 L8 Y4 h; D
for(j=0; j<5; j++)
# c& x) ?! \* V2 L
{
/ Y' R- s+ p# @2 G+ b6 A( E5 R( B# _
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, G2 j: f- W) h$ m
i++;
. N5 I5 Y" j0 S2 c' W
//if(i >= 4096)
; z% s, @& m g6 ^' T4 G. f. w5 K
// break;
0 D+ @) t4 L2 Y! g$ d
% s* Y# Y4 ^/ K8 P& }# q* r
}
7 E7 l7 x2 ?+ m1 f* P+ J0 H
UARTPuts("\n",-2);
% I4 T+ s1 {/ J* C. r6 E# [" ~
}
. D5 \5 V* n, x6 X$ B3 l5 ^# {
}
2 D1 R+ i! W C3 x
9 |: k. r. c. _+ g: E$ J( j
}
8 H$ C% p0 m% _+ ^
2 }- \) \, O% b( S: i5 ]
- F0 w. y3 U, ?% G7 I+ w( z- I, o
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! e4 K/ x/ W) m5 L6 o% W
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 D- T: i* z5 p4 ]4 y% C
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4