嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% `3 x8 `/ D5 t" [/ C( N! h
Void UPP_TASK(Void)
/ s: R. G1 E! m5 c+ |8 D6 S
{
" [9 [- ?: t9 ?# E$ A
( d5 z8 _9 M- l2 P; R; m
int i,j,k,target_int_count=2;
" Y6 w5 X8 z7 N
char ch[2];
$ v. N4 L! @# v
" a0 q- @* [- ~# _$ ]
' H% E B8 J9 ^8 ^1 C( b. b6 m
$ o. W7 X9 l) V! ^0 p
upp_interrupt_count = 0;
q' F1 ^9 b5 `0 L
upp_error_count = 0;
" R* {- ?: m/ u
5 l! q. V. y; C D" v
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 m9 @2 G1 ?0 w n* n5 \
// Initialize data buffers
; I& c" h }( W( b7 n
for (i = 0; i < upp_frame_size; i++)
1 ^3 C3 L, h$ p _: U
{
) i& e2 b( V0 L& p
upp_buffer_b
=i;
0 `+ {8 s) `/ u' u+ W7 r; f$ U0 o
upp_buffer_a
= 0xDEAD;
" p. t8 b4 m7 s0 W6 \
}
z% V& F4 z) J: C3 G" ?; R
% r, K* p0 F% {* T9 d
//for(i=0;i<1024;i++)
2 T, ~% X& z6 R+ [' _
// temp
=0;
; Y D n6 [0 ~! M; |
2 J1 w: @1 t/ Z! Y- w
//UPPReset();
/ @+ }/ n# V) h, b) C8 B: Q$ f
/*启动UPP DMA传输*/
0 F, F+ {; {1 E' h3 }) a
UARTPuts("upp_prog_dma_i\n",-2);
1 I0 i6 F* T1 ?; O5 u
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: z9 D8 `! y6 n0 j$ c
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, U7 @7 T, {9 ?
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% ^4 o; S6 h# P/ V- D# r
3 x( `( s7 R- K& X L: O8 x
UARTPuts("upp_prog_dma_i\n",-2);
4 l# j% H" {5 A- q# X. k- N$ q- @
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 ^/ L( W' ~+ x1 A
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
y# m; ~" }- G# h4 W& D; u* E& ~5 o
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
{: K- P9 t2 P3 ~% z: W
8 ?0 g# |8 N) w
/*等待UPP传输完毕*/
, B: w' D1 o! d7 Z
//i=0;
9 y8 s* v3 k+ f+ F
//j=0;
9 A6 @6 v6 ?7 o) s
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# b' \7 U+ g( p5 r5 `5 C
{
6 q! T4 n0 [) E2 L" _" X" e x2 O
/* 测试UPP传输的同时操作普通DDR数据
1 l* ~) ]- g/ v1 y* o! y
temp
=i;
3 l) i+ {5 V/ E4 _! m8 S4 o1 u& k
i++;
/ ?+ l( H$ m' g$ M8 ]# b
if(i==1024)
) s* X8 a- \. x) q' H* W
{
; @' x. F9 g1 Z
i=0;
/ d4 F. u' U. f4 y" p4 f4 v8 K) `
j++;
. v2 y# }. V$ ^5 v( r' n$ Z9 D
}
+ Z. Z5 z: B L+ X, X3 \4 ?- {
*/
7 P) F5 A, X; Y& {0 o! B3 x' [
3 A4 A5 \7 E3 Q8 }* g" a2 v7 c5 o
asm(" nop");
5 {( ?# \% n" Q2 [2 u5 b
) G, L) o6 K" ~8 F8 \) f; @: m+ }+ t) {
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 |' E: r' {$ T) t3 B- E, E' ~
}
$ R4 m3 I0 u. K) v7 r
7 D. c: g& O) r! a; D
/*检查UPP传输的数据是否正确 (loopback modes only)*/
p' O& Q5 O6 O/ O4 M4 F
//UARTprintf( "i=%d\n",i);
% j! b* J' H5 X0 k5 k9 j
//UARTprintf( "j=%d\n",j);
$ y d& i+ ?3 N8 R7 k( I
UARTPuts("Data mismatch in buffers.\n",-2);
7 M$ H( V: ]. v$ q/ ?' n8 [8 G1 H7 g
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 _, s1 v w' c1 a
{
8 }: a' Q, K& U A9 Q
for (i = 0; i<upp_frame_size; i++)
- b& h7 U# U* [% m0 y6 _5 R
{
# H% `( R$ I7 o- O1 K
if (upp_buffer_a
!= upp_buffer_b
)
: M! w* X8 D j U
{
) d1 D3 a/ ~* v, C; p4 n# h r
upp_error_count++;
$ M6 Y5 l: S/ y2 y8 @
}
& A" L3 f4 n( t/ x) B
}
^" X6 H, E# M3 ~& g
}
% ]- R8 G; M+ r" [& g+ V p
! D) V# L0 b) a5 |7 q
/* 报告通信结果*/
- ]8 e- ` |. R+ I6 u, E: s
if(upp_error_count != 0)
/ n8 n2 ~, B/ Z; @. }
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 A6 I8 b1 D- k& R4 P$ f: I
else
* W) `* P* i# @! Y) E6 ?
UARTPuts("uPP transfers complete!\n",-2);
1 Q8 @+ d( l L5 R8 j, O
; j/ L# O h5 u5 j1 l- [
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% E' p, n+ i6 P P
UARTGets(ch,2);
% x" i) g7 `; Q1 \4 C! v1 }/ c
UARTPuts("\n", -2);
6 s: ]2 Y+ f% l9 H6 Y) l3 J# d$ K) ^
8 O0 {# q0 S4 Z; N2 R
if(ch[0] == 'y')
9 T2 R+ P* ?8 z3 G
{
; G& j3 K: S6 \
/*打印全部读到的数据*/
3 r; a S: [8 F' N/ x
for(i=0; i<upp_frame_size; )
! V4 O: p' f1 _5 f+ n
{
8 P& I& b4 ]! l8 f/ l4 x4 i2 ^
for(j=0; j<5; j++)
) I: j, n: c+ }7 g/ y
{
' v1 F9 i* N2 _& S% j. s: r5 O& v
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* f( t; M, E6 a6 K( Z- R) g
i++;
# r8 Q) B" B" a# j
//if(i >= 4096)
: U, c) N/ M& v2 j' X& r. s
// break;
# ?- t4 I2 l+ l7 |1 Y( U2 o
# {# J( [/ a: N d
}
9 y, n! V4 Q/ l& Q0 K
UARTPuts("\n",-2);
1 ^, f; _1 m% q
}
- g% V, u/ q7 M: T6 v
}
0 p U1 D9 }) P- d0 B* \
. C+ |; M- }0 ^. d
}
& P2 f& s* m+ X2 R1 G+ i) x
t4 L0 z3 U- R8 ~* p8 F
6 {* u" l1 X9 F/ m) l/ K9 F, Z( [! q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" }/ }' ^' t# b- B9 }* L
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 k6 \6 {5 m9 W5 e J+ }: k/ V
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4