嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# M0 X3 {! C' v1 b
Void UPP_TASK(Void)
- K3 X' ~4 F% U# I
{
, c/ G8 |2 w! n& m/ m
5 g% z( T2 l0 h& G; m8 G
int i,j,k,target_int_count=2;
' t, P5 F* N6 g0 a! O( V
char ch[2];
1 U4 n* ?" W* N5 K+ `" E ~
) s9 y: i2 t. n* T; s% \9 f; K
8 W: L5 r: |+ S
6 F/ N0 U; M3 {
upp_interrupt_count = 0;
9 p H4 d$ t- k0 _1 B7 L; e" {5 N* I
upp_error_count = 0;
0 X4 S! l7 s/ e
( F% d1 z3 _* w" O3 @/ Q* b
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ Y# p' C3 p0 a
// Initialize data buffers
$ N7 ^& X' z h4 D8 o+ L; V, J
for (i = 0; i < upp_frame_size; i++)
! n' v- z6 ?+ r6 }& ]3 W2 l1 f
{
3 a* z) e' e7 A8 b# K3 w
upp_buffer_b
=i;
6 `" U2 q" h* Y5 U9 V6 W
upp_buffer_a
= 0xDEAD;
1 L: h1 x/ B4 V5 b# L
}
+ L6 i1 \1 f k1 F- f$ H+ M$ v
/ a4 E3 z) f2 U6 d6 N
//for(i=0;i<1024;i++)
9 t- h; T# v8 p- \/ t8 E5 |
// temp
=0;
& l' B4 L7 ~4 J$ v [! W
7 E- B2 K/ t5 {2 j+ n2 m
//UPPReset();
# b% N9 p( C' ?" F$ a+ b5 f) T
/*启动UPP DMA传输*/
5 M9 m; V7 w( n' M; G5 \
UARTPuts("upp_prog_dma_i\n",-2);
& {7 J) S7 T. @/ O; N- [
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" q3 _6 K, N; y& [- _
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. X: N) V% ?; t+ m, f8 e
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, O3 `1 {# _+ d+ E! j
- P- X7 K# I9 f6 Y8 T( I
UARTPuts("upp_prog_dma_i\n",-2);
% L; h; T1 S P6 `2 A$ {( }
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 p( G' P' C0 B$ Y! l ~! S
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, `* A3 g+ Q; Q: A) a
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- T( _8 o7 O6 q: ^ Q. `
' t" j2 W8 h. o: _2 M! a# c
/*等待UPP传输完毕*/
# `+ ]. _* G% ~$ o
//i=0;
+ N, f# j" d$ ^8 j( r
//j=0;
2 \( d S3 `1 O5 S, f
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( T1 w( [# e# {* L8 D" p* S
{
- x# x% l9 K7 K' G- `
/* 测试UPP传输的同时操作普通DDR数据
, @5 Q- E# W: K* {7 `
temp
=i;
0 [- B) O: w `6 L! [
i++;
/ M0 C6 N7 N& A2 z+ a
if(i==1024)
$ B' Y4 m- a- }! L) t) c8 D$ j* Q2 i4 T, O
{
3 y( G- |3 R" n/ y2 m
i=0;
4 R3 B! ?. s9 G# z: F$ d8 }, X
j++;
3 m6 N, ?+ g; r9 J# [" a6 B. ?. a
}
( V' W3 p) o# \
*/
+ s3 L5 L! Y2 f9 `% H& ~4 v% \+ h! j
; G* S2 y4 V2 Y3 g& L- u
asm(" nop");
1 p( |$ ^* m3 v' g
% r1 N# @& Q) v% e3 [9 \4 ^
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 n0 k, t |1 n
}
" C' H8 n0 I! x3 K
# [' O0 ^6 e* C7 d5 e" f4 B
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, u' _8 z$ u6 X; B- C
//UARTprintf( "i=%d\n",i);
/ a4 y+ t/ M+ v& {2 T0 l
//UARTprintf( "j=%d\n",j);
' t: v V6 O3 C! w0 I% e6 i! ^2 t3 m
UARTPuts("Data mismatch in buffers.\n",-2);
3 k6 O5 x( R3 s$ T4 _' |
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 L# M0 \ }$ R' h7 I* y
{
( ~4 w* k! K/ x9 x$ K/ y& O7 \
for (i = 0; i<upp_frame_size; i++)
- k% Z; _) O* W U
{
( r3 e6 Z( J6 W7 j, c6 c
if (upp_buffer_a
!= upp_buffer_b
)
6 K8 \, P% d! P# r+ z) X
{
$ r* s/ T4 _" @* G
upp_error_count++;
! C! k$ k b" S# {& Y+ \
}
- ?" {0 I1 Q3 y3 p @2 j
}
; |- v8 p+ v" S6 G0 N
}
* |8 i/ b$ B# `
8 ~; n: ], N, K9 W. w% q; n
/* 报告通信结果*/
1 W' y# {) j! f) i, x' D6 B) T
if(upp_error_count != 0)
3 ^ P+ l' ?$ j# w M. ?+ s
UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 p& c7 I) _; h( u$ O- }
else
8 y! Q, h) u: [0 s% Y6 e5 b. S
UARTPuts("uPP transfers complete!\n",-2);
( k0 f Q; \6 F i0 s
/ c6 ^5 w, p4 d! u
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 ^0 @; X* W3 q. B1 A( p
UARTGets(ch,2);
2 f7 @% _, Y& D
UARTPuts("\n", -2);
! O5 L! ~1 r/ @/ w
O: a) a/ Z$ c) p& V+ h
if(ch[0] == 'y')
. p Y) A, m5 |" W5 f
{
% M6 F$ u. I1 S0 V
/*打印全部读到的数据*/
) T( C' d: n% }9 U) A2 l
for(i=0; i<upp_frame_size; )
+ d! }5 W/ f& w5 }9 M: E) v+ d
{
" Y5 A+ Y3 L' k7 B/ C- }! ]
for(j=0; j<5; j++)
; m7 r) }7 W0 E
{
- [/ \$ J; l9 i, b+ ^; `; l- I
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. Q. p" v1 ]$ i# ^1 n
i++;
2 [( n! E5 @- [- X- m
//if(i >= 4096)
2 S6 A9 X! f9 C+ |, e9 G
// break;
( R+ u- r: X) b( S) b! D, N# ^
% X" [, E. N3 Q- o6 ^
}
: K2 ~, O$ ~8 K: v- Q" T2 D
UARTPuts("\n",-2);
" z! D( N7 w8 w1 o8 v
}
* A/ J! C5 s0 h0 {
}
. Y" K' Z1 z$ y/ l4 ?
! D$ k5 M) w4 Q# y0 U: j
}
" X7 w% G* \# d, D7 _
4 m; S7 v( h9 k/ X; Z
4 Q8 {! X7 E- B7 @; A+ d
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# D6 A: y/ ~+ m) v0 t8 x* T
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- M9 J3 h7 g1 L' E6 }
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4