嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- q0 ?8 | v9 N! K
Void UPP_TASK(Void)
1 R: [3 K7 v; A! c* f: `! B9 |1 B
{
: h. q! a+ D2 g1 w7 D
' R& u4 a- ?: O; R: V
int i,j,k,target_int_count=2;
* v% W$ u. [4 w6 v H& C
char ch[2];
/ B% j+ S" [, x `
. Y7 t# O; d, p' ~% ~& r& {
- @; V4 |6 ]/ e8 ?
3 b# G; T* C! `3 ~. L M8 V
upp_interrupt_count = 0;
+ `9 W3 \. [5 b9 U+ f! u
upp_error_count = 0;
1 x) k1 H3 m6 ]) b. C y5 G
# n( I& s" D# x' O4 I
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 e9 K) Y% h7 t% x
// Initialize data buffers
' S# d# P0 t0 g. m: T
for (i = 0; i < upp_frame_size; i++)
( t; g( [( r% B2 X& m2 X
{
$ w m; |$ t) Q/ D/ M& [- v; A* I
upp_buffer_b
=i;
" W P h% q. ^* t$ `: V
upp_buffer_a
= 0xDEAD;
& L1 L5 U' ^5 j6 g& Y4 y( e
}
7 u' P" |0 n, O% r
6 J0 [, ~" C1 u: g5 i' P8 x
//for(i=0;i<1024;i++)
9 e: X- }8 H$ K
// temp
=0;
2 ?% @8 R z! q/ G: b, O
3 k R" c' E1 D5 |/ I. e
//UPPReset();
# g1 B0 V3 s% O: u
/*启动UPP DMA传输*/
6 x z1 c) N7 N4 ?, {% Q
UARTPuts("upp_prog_dma_i\n",-2);
. f/ l; c( ~6 C% l
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 [3 r% V+ C3 y9 I: H4 i
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) T0 [! a/ I$ I6 A& P5 H
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ z* o& K7 O5 l* t: H- a+ b
5 ~* B4 I+ D3 ]$ V8 v
UARTPuts("upp_prog_dma_i\n",-2);
/ T5 k7 f- G& W& v
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# s( R! x! y5 E% Q4 q# H
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ V8 d$ |# l ]
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" n7 r' d2 n3 t) o" H% R- K }
! G3 l; s/ Q7 m
/*等待UPP传输完毕*/
0 X" P, F1 X' Z" Q' ]
//i=0;
8 S3 Y( T7 J2 O' R& j5 a i/ P: K
//j=0;
( p4 m. o: Z+ D7 A7 T
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
H! G& @. Z* `( X' `
{
* r [ e6 [# [. a
/* 测试UPP传输的同时操作普通DDR数据
: E/ ~- ]! S7 F+ V9 U8 X( {
temp
=i;
' w/ V8 q$ U3 t4 i
i++;
* S* \4 Y( s ^: ~, `! `6 i
if(i==1024)
4 \; l# O8 f, H' j7 a5 \) V0 Q- Q
{
2 ~+ X" i! p% N) \
i=0;
$ e; B; ]! t$ v* V
j++;
: y4 ?8 N" v' }5 D
}
! A7 F1 M: u8 r( H7 g7 H9 F1 v) }% m
*/
& e9 U) D) g( m$ A/ ~5 O
7 D, W( W2 C* B- q1 H
asm(" nop");
: A8 M$ \5 f6 T; W4 r% N
/ }; X( B2 g+ a. Q- g
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; X3 y$ s, ^. H* j
}
' L, j- z, [0 e
! K7 z$ p: u4 U/ \+ h- M: c1 E
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* {$ k6 c U; T: n( B0 I! f( K( k% I
//UARTprintf( "i=%d\n",i);
! c6 n! ?0 E# h
//UARTprintf( "j=%d\n",j);
6 u: s v0 P" Q& y
UARTPuts("Data mismatch in buffers.\n",-2);
7 H0 p: G1 ~2 K- X- Z1 I
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 _- [0 s) w+ |: S" T% N
{
! a, g, W2 M e! A0 v7 [
for (i = 0; i<upp_frame_size; i++)
" l) y5 j' z. ?
{
0 m- ]; J2 a: x: Q9 t8 N& o. |
if (upp_buffer_a
!= upp_buffer_b
)
) F9 X( e. N6 D. x
{
. F% p& V3 W5 u1 W; W3 I' O
upp_error_count++;
) I, {* J1 s4 r- Z
}
% i2 O& f; E; h3 S+ [0 B
}
K$ o3 O, n' |6 L9 P% o* B* M: r
}
( n% \" i; W3 R& J2 ~* n6 p
$ o: r; V% A- ?0 b
/* 报告通信结果*/
# w8 i1 Q- d7 x3 ]$ t$ _
if(upp_error_count != 0)
) A2 \# K9 ?) C. c5 M* j9 k
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# W# t+ H! w) [ X. b
else
4 j/ C; k4 Z2 T, C7 w' P
UARTPuts("uPP transfers complete!\n",-2);
$ Y' Q4 A; m* g5 N B7 |/ ?
/ G* E" e2 Z# H
UARTPuts("Do you want to print all the data?(y/n) ",-2);
S2 r! Q/ {4 T
UARTGets(ch,2);
9 U0 T1 e, u3 v5 T
UARTPuts("\n", -2);
) ?" q# s1 Z9 M+ P1 R9 a( j3 Q' w) S
- i# o- I9 J+ q2 N8 i* K5 T
if(ch[0] == 'y')
& M6 l' z3 _9 o2 p/ r
{
" y7 W6 u, a0 H7 k) d
/*打印全部读到的数据*/
) ^" S# d& Q* C# s5 ?
for(i=0; i<upp_frame_size; )
- Z9 V9 e- m$ ~* x
{
8 ?+ j1 s( |. ^9 ^
for(j=0; j<5; j++)
" A8 U) Y3 i- S( e
{
+ O2 u8 Y L; H5 H5 y% U# {. B
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 p0 @ h S4 i3 E
i++;
9 }1 W2 t+ K/ C
//if(i >= 4096)
0 `6 `3 F6 Z) t2 b, V0 E
// break;
& n, I l$ |+ X) Z4 y- A7 v
7 C: Z- ^! U1 f+ ~) Z' ~
}
9 D$ A, H2 \% N- f- n
UARTPuts("\n",-2);
; Z' D) s) E1 ^3 Q1 |, K, V
}
9 Z. Q# w5 F/ _) ~ s
}
. Y- ^2 E g5 X" a% ]
, O3 D( j, e5 T$ f7 c
}
M8 T h! C" t; H
+ G3 W+ H& d$ X4 m' n, t* ]
4 V( K+ @, a# I, D# `5 e( D* j8 P% ], i
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# k( v& r) |8 u; f
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: v0 O6 X9 e. p8 t
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4