嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" c V5 ?. X7 _1 x. ]7 C. v" f
Void UPP_TASK(Void)
5 Q8 Z5 p3 X) [& k0 X
{
4 e% Y* ~7 L( ^
% ^9 l- l2 j4 o+ S4 Q F, ~
int i,j,k,target_int_count=2;
: K1 o( _6 |. t1 n; i) H
char ch[2];
1 l% _! p7 K- H. P& C/ q
" s0 V- H% {7 ]- J
; A! C3 `5 j1 j9 o! F+ n
& L- j- R# S1 \$ r M
upp_interrupt_count = 0;
, s* o) `: C V# \; F& z
upp_error_count = 0;
/ |, j' D$ ~8 k8 \, F- s# H# _% }
+ w, |$ v9 z8 q$ S0 P
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ a0 @; L7 ~+ l7 S! n- K+ C. V/ }/ _+ ?
// Initialize data buffers
% T8 D/ V1 y7 ~! b4 C
for (i = 0; i < upp_frame_size; i++)
* V* d1 N: {) E0 { U( u7 e9 @
{
" B7 h! C6 A! {. J) u2 X( g
upp_buffer_b
=i;
" g5 x) t) B; o" q: s0 W1 M9 p
upp_buffer_a
= 0xDEAD;
5 J/ q1 M0 w4 f$ u6 U
}
1 G! f+ F% D: P1 ~+ J! w$ q6 E/ W
1 V I- E" G- ?+ X+ ]: ^: J3 i
//for(i=0;i<1024;i++)
6 u" d/ \% b g/ j* n/ U V
// temp
=0;
0 D: e% {1 Y5 g- o
( A4 a( d1 ]4 l4 O- D9 w" d
//UPPReset();
/ v$ n O) l& j% N" \; L4 f% u0 ^
/*启动UPP DMA传输*/
2 W/ ^# n y7 j3 z4 p( B& V6 k/ S
UARTPuts("upp_prog_dma_i\n",-2);
6 \1 f2 N6 k/ Y8 U
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 d6 c* p, ^2 D6 v- [) F
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' R* V' B3 S0 P ?) |
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, z- S. ^5 e" h% s, M1 I
) l8 |5 O+ ?8 ^% o
UARTPuts("upp_prog_dma_i\n",-2);
' Q3 n2 A4 r& @1 Z
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; p8 \' Z7 O9 A3 b# ]8 A
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ J& ]( U; T% J4 ~5 A+ k& u0 n
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* o3 X" ~- Z2 u) m
% ?; m2 u; n9 D) N" P! k2 [0 M
/*等待UPP传输完毕*/
: V$ ~' q; W2 [8 h- m0 k
//i=0;
) ~5 ?4 s0 @( h$ I9 w
//j=0;
/ A9 |# c! p& O- ~) J2 E
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: y6 E2 f; A4 X
{
( c% x# D& H! w5 r' Y( t
/* 测试UPP传输的同时操作普通DDR数据
0 u" [0 G, c; `1 J" B+ p
temp
=i;
7 ?6 P* B& [% \7 L- W- I
i++;
1 \9 y- @; ], d6 v
if(i==1024)
( V" R7 L2 Q6 @2 K
{
y& Z& f% u4 w0 l
i=0;
! [! \: @$ N( W& t
j++;
: e2 `" H2 |' H4 g* p
}
' q2 |# R9 V1 S6 x/ @2 ~8 [
*/
- X8 e N' f4 m1 ]6 r
/ `2 @/ j; G- o; Q; i3 s
asm(" nop");
* q+ t' h6 t4 ~/ [$ ~, x
- Q+ D$ W( Q) m. I( l, }
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# q+ c5 E9 S* B1 Q0 D6 Y
}
L$ V' q# i/ o: e; `
5 M9 E, \) {, D& w
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* c5 q- O) z9 l( T+ n
//UARTprintf( "i=%d\n",i);
3 `( M+ u( o7 O- Y) b
//UARTprintf( "j=%d\n",j);
2 L1 L! G) j" n& k1 o
UARTPuts("Data mismatch in buffers.\n",-2);
) F- ]3 ?; d6 u1 f' s6 I+ Q9 g5 N3 X
if (upp_interrupt_count == 2 && upp_error_count == 0)
* Y# I; d, K% z# [. r3 `
{
4 J/ S* ~3 y: t" ~
for (i = 0; i<upp_frame_size; i++)
9 s+ U4 b3 a& L1 Z7 e3 \9 q3 h
{
6 h7 M& i3 Z: C. E1 V
if (upp_buffer_a
!= upp_buffer_b
)
6 G2 }8 g$ C: x9 t3 L. V2 l! F3 R# F
{
/ s; y+ i. |" u+ c# Z5 f
upp_error_count++;
3 W, W1 a! l. D! q
}
9 H5 L% ]1 O; W& ~* ]
}
6 e r* n3 h* c( u8 k0 r
}
~- Y7 p4 f4 B* u0 F
% |* y, L& P5 J, Z t1 h
/* 报告通信结果*/
- ~) C4 u: S6 H# x+ j
if(upp_error_count != 0)
- A. r6 x( r4 q* Q' g6 W6 L
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* r$ T' m H( b: I" v' {
else
, N( \) E4 f+ O9 W7 H" l
UARTPuts("uPP transfers complete!\n",-2);
& M4 K" k, S( V
: A- g) D( }* F- R" e
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; O- Z. E- w) A9 w R' d4 M/ H
UARTGets(ch,2);
" F( U9 ^5 v8 V4 E' `! t
UARTPuts("\n", -2);
- [+ q, U, {$ B5 R$ C
9 S. I" m" c$ ?! n4 } W
if(ch[0] == 'y')
; P1 g) o9 y7 B8 B
{
5 ^; o V. [$ |+ q) Q! o
/*打印全部读到的数据*/
; W0 N9 G* E" S0 K
for(i=0; i<upp_frame_size; )
8 P0 n- s% @0 U, {; [
{
: f- X( ~* n- E9 f+ D
for(j=0; j<5; j++)
+ }9 ^, T: G2 G9 J i1 T; k. }$ D, ^
{
1 v% t1 z5 n4 L9 v) Q
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. |$ o8 E9 a; H# e- W0 B
i++;
* G0 l; M: p: z8 o5 ]2 m1 E1 R
//if(i >= 4096)
$ B" Q3 s; {+ C
// break;
! a: D) |9 w( V& f) s3 h4 G
: p. s) a/ ^3 Q8 P$ K! I7 b4 w
}
; a# c: U1 V: J9 [2 v X- G& B% R
UARTPuts("\n",-2);
: L& ^; |) n& I$ N H9 y3 o) {/ j
}
: F8 r7 i% w0 q: |8 Q4 B2 t r+ ~
}
; _3 Y3 b4 a( F, `/ l0 M4 w
9 E \( V4 }; `* Y" a
}
3 A) e% I1 `* ]9 [
" Z$ I3 l: M$ V9 b4 a
# w+ u5 Q! U& ~
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# J- i( W$ k- [! h4 m
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' g1 i- a- @6 Z
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4