嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 g1 c- J7 u6 J' ^. q3 {
Void UPP_TASK(Void)
( p! W1 v" |4 B4 H$ j- x2 a/ B& Q& i2 P
{
3 h2 H2 J& N. X* X; b, k
) p2 E, u: N9 @$ {$ F( b
int i,j,k,target_int_count=2;
' i% S- f5 \: |8 ~
char ch[2];
* q- k" R9 X! w8 a8 N
" {4 H3 c6 C* F7 E1 }
. @1 Y1 X9 f2 k+ z n' q
$ o* s6 [1 g0 x# N. n7 ` g
upp_interrupt_count = 0;
5 X( y3 r) t5 {. S
upp_error_count = 0;
2 b8 J. b. h+ u; J9 ^3 Q
5 @3 t/ l3 u/ T4 N9 N7 R4 p$ e
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- X+ p7 v2 |: H4 o
// Initialize data buffers
4 r% Y3 b- `- @
for (i = 0; i < upp_frame_size; i++)
, R& g8 u7 A! c; X' O* E3 Z+ ~
{
. a- ?1 i2 h& b7 d' R1 T& l
upp_buffer_b
=i;
4 y# i5 U5 s' X& P0 k4 q
upp_buffer_a
= 0xDEAD;
5 G# O/ {. Y9 v8 `
}
2 t8 o8 ]2 W. Y5 Q& c2 A0 H
! I& k/ R# v7 `1 Y& g
//for(i=0;i<1024;i++)
- a4 L, r' O5 n
// temp
=0;
$ m0 E% w* T& [5 {8 {
4 H+ L' p! |/ g5 y6 o- y4 o$ Q
//UPPReset();
8 }% a4 x6 @0 z2 {+ B" l
/*启动UPP DMA传输*/
7 ]$ `! c) _; q8 s* i. c
UARTPuts("upp_prog_dma_i\n",-2);
, m5 R! G8 \" q3 x
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 n) n1 }5 v4 t$ a) p+ o2 p. M( X
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" b" l, Z* f' i9 W
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, m7 U0 @/ [& h5 [5 q
% Z; ?# c/ K& I
UARTPuts("upp_prog_dma_i\n",-2);
2 ]: x, v- Q- b4 l
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) Q, c8 X3 a/ N9 S \0 b/ a
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 {! U( m4 j8 N, C1 K
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; P: {4 g4 i/ p+ T5 `( |
6 t* c& P' H% f% ~% f
/*等待UPP传输完毕*/
; q4 `2 r. g/ i+ [, \
//i=0;
0 t( j* G f/ M; @ d% T( c
//j=0;
& n) L( o, H; y/ o) N
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- D* P! \8 q% v& i
{
5 l' |5 a* S; B9 R, n
/* 测试UPP传输的同时操作普通DDR数据
1 h% ~( u1 u0 _, I. y4 `$ K
temp
=i;
# ~' [# r, n4 T; }
i++;
- ?' W5 _1 L3 b: j/ L
if(i==1024)
+ S- d5 S: @& K+ g
{
! F9 J* G5 T, g4 w9 O
i=0;
' f9 Y& p5 K4 j6 O3 }! \; ]
j++;
( ^. }0 h5 R2 M* x; b% T2 b: n7 v$ I
}
8 K5 ]- ?9 N, N% n; l# k# G
*/
5 a7 c, t5 R2 X, w
3 [# y& p. f4 t8 ^6 f) J) }. y
asm(" nop");
# ?2 J5 I) A1 W0 |/ ?/ F/ s9 Z1 w/ {
6 c$ O" K& k7 r7 J' ?2 o+ ~
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) _* D& ~- H. R5 n6 s& Y t
}
7 H$ X: Z1 S5 f
8 g( b4 O& }# g, p5 K8 C1 Q4 ]
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 |7 X( {2 z! p
//UARTprintf( "i=%d\n",i);
j6 } Z! i# r, D: S% d3 I
//UARTprintf( "j=%d\n",j);
4 Y( j: C8 e" U6 S: o
UARTPuts("Data mismatch in buffers.\n",-2);
0 S0 h8 Q! S4 {6 o. o
if (upp_interrupt_count == 2 && upp_error_count == 0)
! Z' O" x9 c8 R% s ~4 Y
{
, t# V5 k; U/ w& d3 V. q" d+ ?
for (i = 0; i<upp_frame_size; i++)
; k v5 m8 c7 C( r
{
+ I7 D" I" `3 }, B: W* m# i) [
if (upp_buffer_a
!= upp_buffer_b
)
' F$ @6 t" b; N( p4 ^
{
$ |8 r0 n! u% ? f0 B
upp_error_count++;
5 \# ~* L1 k7 J3 ~
}
+ x A& W% b7 F
}
# _) P2 l! \3 [" Y
}
3 N, o2 ^4 `! _
3 @( |$ P% f/ z+ y" N" m( F; p
/* 报告通信结果*/
% B1 h5 |* i( p$ b d6 b
if(upp_error_count != 0)
- C8 i7 m& p/ d' [7 u. |# D8 R
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 ^# i# K8 R2 Z& d q
else
) z' u0 w3 D9 N
UARTPuts("uPP transfers complete!\n",-2);
_2 p) o4 X8 t/ D- P
0 L+ N2 B ~# e# K V p
UARTPuts("Do you want to print all the data?(y/n) ",-2);
9 e/ u9 E* E* v- C
UARTGets(ch,2);
2 w" S* n# l% _0 x
UARTPuts("\n", -2);
- j- C7 e" X6 R; I5 |9 e
9 E3 `, n3 l! r) A) u
if(ch[0] == 'y')
2 {7 H; P0 D) Q( Z$ y
{
: I, \7 J' n+ p) B5 `
/*打印全部读到的数据*/
( e' j$ f+ k# ^& B- p" M) @& u
for(i=0; i<upp_frame_size; )
" `2 b8 ?& e* ]$ h
{
- l% o& |2 b G7 F) T% q+ i( f2 W1 z
for(j=0; j<5; j++)
5 r) x3 f8 c- A' `8 q t( F7 r
{
* z A; X P: S, g1 r8 N1 _' `
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( }, H8 y% A! W
i++;
) S+ z1 l V3 B: i }7 G
//if(i >= 4096)
! N6 y! n b" P6 T$ G
// break;
* F4 d4 |, P3 c! S/ [3 P
( }! l0 B8 _+ k/ c3 A1 ]
}
8 j6 K8 Z+ G( d% y
UARTPuts("\n",-2);
) U- e. ~' e0 |! K
}
/ _; c# Q& {# f0 D2 O& }
}
! V+ ~- J9 E9 K9 [( k+ D
8 N4 B5 C2 M1 z ?% S9 E* W5 Y
}
* J- Z+ O8 @. n, e! R6 O$ d* m6 ?
4 x+ D$ a% q1 R" ^& K$ I
, k: ~- H1 T$ i! w
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: g2 b' t# W) Q- u# d( d; ^- G
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 W( z; I5 f! c& |. s
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4