嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ {4 R2 X# x5 r9 J$ Z+ j; c
Void UPP_TASK(Void)
7 c0 S: R& m, K+ @/ n$ q
{
# p6 J4 s5 p% }% m4 n4 T
" C+ e) j; `: A5 C: H8 \
int i,j,k,target_int_count=2;
( D4 O A" o3 c
char ch[2];
v7 A, R( n& B& M' X* [
+ P+ s; `+ E: }' [! [
% N$ \3 o) c6 L3 Q7 [! d
* }# I5 J. [9 g4 A
upp_interrupt_count = 0;
. u0 I% R+ Q' H/ y3 r
upp_error_count = 0;
* f( J0 J8 T9 i) U* K5 i1 L
& e4 p6 m7 f( _# ~
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 o+ O) f& [! M# l& Y+ E
// Initialize data buffers
% _$ H+ z( a, g* K
for (i = 0; i < upp_frame_size; i++)
$ N( X1 X3 T, e) j
{
% ]* U% R2 d- Z. |7 }" g
upp_buffer_b
=i;
5 u0 X1 {( t$ A
upp_buffer_a
= 0xDEAD;
8 H g4 K" Y# [3 ^2 b' s4 D
}
' o, A0 Z$ z- V: U1 Q3 k
1 _ m5 m# ?2 T* L2 x& c! u* R! G- v
//for(i=0;i<1024;i++)
. H. p2 O3 l6 y* C
// temp
=0;
2 k: }" q5 {* ?! m; {0 y8 e3 S; S
4 ?: e) F8 P6 ^5 \
//UPPReset();
% |& E! B! t) b! w' S) [
/*启动UPP DMA传输*/
8 c* M' U7 Z0 _9 {/ Z+ J+ L
UARTPuts("upp_prog_dma_i\n",-2);
; _8 _( t5 u0 G1 t& U
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' t; G. `+ m; y$ |& p% W
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, \2 l1 ]" c! V5 }, }
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 T1 t; D" G% h
# h- o) Q% V" M0 A. W& ~ K
UARTPuts("upp_prog_dma_i\n",-2);
3 V, N+ W3 W$ F3 j: h: t
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. Z8 y) n- e( i. C. G1 p' i- B) @
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 }0 P( k1 q- n9 b. G- W' v z, t
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: b) X+ y1 x. j5 Q! B! }; W5 y0 ]
! y$ g; g- C& L7 J& k7 Z$ Q1 g
/*等待UPP传输完毕*/
; ?. o, J# v, o9 e5 k' C) Z
//i=0;
7 e1 y6 C0 P% s8 b% s9 L, L# ]8 H
//j=0;
) ]# K V1 H& p# {
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
& N Z( D4 H- d, d$ J$ y
{
& b5 g0 t$ `8 j5 t* f
/* 测试UPP传输的同时操作普通DDR数据
6 ]! x" b# t% `9 O2 i; A6 h* O' h
temp
=i;
0 b: h) ?" i* J/ n- q
i++;
% H& _ x! V% _
if(i==1024)
# k" n% F" o% J
{
* G% |: a$ e/ z( ~
i=0;
$ I$ o( a" w5 N' N+ t' c+ i
j++;
) Q! u# n$ N( q# W# j! e4 O
}
1 X# _& u3 O' S U$ G
*/
4 ?. g. d. @) ?
/ S# w1 l9 ?/ k1 f; K$ H8 g' H
asm(" nop");
8 j0 y3 C P& ~0 o& A
( M. S& W0 w1 N/ M* Y& |8 m* w
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* t9 K; C/ H1 G9 ]
}
7 D5 e$ I8 [* e% M7 j* T
& T! N0 N) ~6 Z
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' |$ c3 ^# Z; Y1 v
//UARTprintf( "i=%d\n",i);
, _3 Y, x2 [: s+ z, E6 d
//UARTprintf( "j=%d\n",j);
5 U' t! Z w$ i0 N) V9 o
UARTPuts("Data mismatch in buffers.\n",-2);
$ @; K6 V$ n' A+ j- q
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 d( C8 `1 L& I
{
) Q. J$ U& B4 r8 k/ p! j) S
for (i = 0; i<upp_frame_size; i++)
- M8 J! n& I8 \: q1 _
{
# Q5 M$ A4 A6 V" Q9 Q
if (upp_buffer_a
!= upp_buffer_b
)
' g) K0 ^3 q6 v0 Y# C3 h
{
1 n. G. o* |4 c9 o6 E/ x
upp_error_count++;
/ R( u$ E- ?: ?. a- F4 T0 U
}
) E* R* b2 c) f- l% E9 }
}
# U, @& q$ a9 }9 A! R5 Y4 G
}
7 e8 W3 f* Q# f6 H' D
% ~0 l# O4 j+ A. i7 x h. v
/* 报告通信结果*/
: c; ~! l! K* N" G0 A2 u
if(upp_error_count != 0)
9 ~4 m2 P o5 n7 V6 ^
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 M$ w( Q3 O0 ^$ W/ Z' w
else
7 l2 L3 T" q+ _8 V6 c' ]6 d) }3 e$ J
UARTPuts("uPP transfers complete!\n",-2);
7 t% F, X8 \5 i: f
) e, V# g: O1 x7 r) I
UARTPuts("Do you want to print all the data?(y/n) ",-2);
3 `- u3 t+ y b- L: V' j
UARTGets(ch,2);
) | i( u }4 s6 d4 C n0 H
UARTPuts("\n", -2);
( M1 m/ Z/ G. v" k7 P
. ?1 D' r. [7 W7 f
if(ch[0] == 'y')
) {+ [- A6 L- w: G! e' ]0 f
{
4 o0 m9 I: o3 ?6 v$ Q
/*打印全部读到的数据*/
! Y! b& }5 m5 }+ J
for(i=0; i<upp_frame_size; )
2 H" y2 Y3 B* }2 A# }
{
R' i7 p! C8 F' o
for(j=0; j<5; j++)
, h7 D. b% W% J: d6 _& O
{
8 A0 k$ r! x& k
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ Y) g" K/ M6 v. s6 h
i++;
, y; U5 Z% H/ G4 q5 r( y5 q6 B4 |3 ~5 j
//if(i >= 4096)
/ h" K. Q* }6 q E9 {
// break;
" O6 N1 B2 w6 \
+ Z; U3 I. G& w* m
}
7 @ k1 a* l5 R4 ~/ |" Q" n8 J3 E
UARTPuts("\n",-2);
) Y/ H: a8 n+ ]7 y; ^, {8 Y
}
2 b, ?* l Q( a& _& r/ I2 x7 _
}
2 q& ]! S/ G) d$ O- q/ O$ }1 w v
# _7 f6 C" b& E7 j% w! r
}
# [; y* |8 U& b/ t$ E8 P. [
6 U, X: \* E' b
/ I; z* u* I4 q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* O1 @0 g: B# u9 ]* `
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 R1 m N) v$ s9 Z- [6 l3 R/ W# @: O* R
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4