嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& u* H+ ?3 C5 L
Void UPP_TASK(Void)
, j1 ]! M5 w9 `0 X, ]# M
{
9 S2 P" R7 p$ E* _% }- q
) b, j! W+ D$ z* Z, X! g9 Q4 o: M
int i,j,k,target_int_count=2;
, u% @: P0 E! C# l
char ch[2];
1 }3 u5 c% o7 T7 k/ d4 W0 k
3 {' T. a, v4 e1 w% A7 v3 R+ I) {
- T7 |3 P0 n; [; K% W* L
& j, E3 e/ o( x" P
upp_interrupt_count = 0;
) b( E' T2 {9 [
upp_error_count = 0;
. F: H0 P: K: M) i- S9 D* F4 A2 b7 Z
# U; L; N2 t9 v; `4 e$ ?8 `; y
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. K" u. M' \5 X6 a$ W! O
// Initialize data buffers
1 p5 t! {3 w" i/ c1 N% d& A
for (i = 0; i < upp_frame_size; i++)
6 x$ W" Q& |* n" {: ~, {: X( j
{
( C$ _5 {: U' x5 b* @! x
upp_buffer_b
=i;
) `. J7 O2 ]7 a. A
upp_buffer_a
= 0xDEAD;
! `$ Z1 F5 m6 z0 g: @
}
" Y. h8 y2 |' P: K: y& x
' z- ^( ^+ S( F" G K& F" d
//for(i=0;i<1024;i++)
% v( r6 R5 k& L" F! V* q
// temp
=0;
5 \9 Y9 n) O6 b5 B- Y* U
, |( v3 B9 h) Y% E6 U" R9 N; g
//UPPReset();
* K1 \) w& T/ M- q
/*启动UPP DMA传输*/
1 c/ V% m3 D6 X( v5 ?2 {
UARTPuts("upp_prog_dma_i\n",-2);
w4 t% U( [. g1 {4 G- W
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 L R3 |/ |- c6 C
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 D, `0 H& b8 F' T3 c0 }
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: W6 Z, @' c& M+ A8 c9 V8 {% k
; S6 E- E7 Y' a7 [! T; u1 S; ~8 X) y: ]
UARTPuts("upp_prog_dma_i\n",-2);
* F8 x. A+ ^2 C. z& |
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ G f2 ^: b/ a) b& S5 g
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) n" G. M: |2 T" y6 r- p2 j
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 V. ~! n# [4 v, h# q ~0 ]0 A" E2 U
: E) W% N2 L3 `+ d
/*等待UPP传输完毕*/
$ q. P1 b& m6 t3 m$ a3 ]$ ]6 u/ E
//i=0;
) \7 n4 y- A2 p7 {# i
//j=0;
$ n U, |- T; L3 @
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. N& e# X8 r: N6 _! T) A0 ]! D
{
; m0 g; s% ]0 F* r8 N) b8 K. @* [
/* 测试UPP传输的同时操作普通DDR数据
9 q1 N- ~) q2 Y& N. j! p
temp
=i;
6 f2 A; Z2 x4 @+ L
i++;
* H; o1 [2 |- p0 S$ k- `
if(i==1024)
4 e! a+ a0 U. k% X+ f# Q8 k0 x" N
{
+ \7 W9 [/ K' V
i=0;
% W. w# b$ Y& n7 T, P7 t5 O
j++;
; c, H6 X. C0 j$ q/ a
}
1 \9 C$ c: c/ k T# r
*/
: f( r( h& f7 r! p
; H+ a5 ~4 `! q
asm(" nop");
6 {+ w+ d* n" g" v
4 C/ f$ O/ {5 v! s3 Q
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( h# i1 ~3 s0 O
}
& T0 x$ F' i) J
- G) j% y. O. D, z% [" K8 n- n
/*检查UPP传输的数据是否正确 (loopback modes only)*/
6 _* |3 E1 G+ I8 S* {0 V2 ^2 x
//UARTprintf( "i=%d\n",i);
( q" _7 N% }( t. I' P
//UARTprintf( "j=%d\n",j);
, n4 `0 [4 h0 \9 G) x/ J2 t
UARTPuts("Data mismatch in buffers.\n",-2);
" X# t, n& ^6 m, U) X$ \
if (upp_interrupt_count == 2 && upp_error_count == 0)
' x& ~! E8 ^4 e2 x( M
{
% ~, ?) X: b2 X% J7 o
for (i = 0; i<upp_frame_size; i++)
& A$ L4 c, i ^, Y3 \, ]) Z
{
( t; n( Y" Y' G+ _. z7 q' B
if (upp_buffer_a
!= upp_buffer_b
)
# u' p. m7 t" D# p* ~
{
$ D) y, u3 E4 ]+ w! r w. ?
upp_error_count++;
0 Z; J/ r& G( r
}
# Q, Z. s4 ~' }1 N) V' O
}
& ~* D& v; e o# J
}
( {4 ^( i& l0 M! p
# d! U$ q" o7 H! J
/* 报告通信结果*/
' W9 g4 z4 k; B. c6 `% I3 l
if(upp_error_count != 0)
: }: R, h& h9 N+ p
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 U$ q5 ~( ^' G3 K; J
else
9 |" G9 K' J) v! }3 r4 J' S7 A
UARTPuts("uPP transfers complete!\n",-2);
1 ?0 K6 p Z% \! Z8 @: _* s
( x* B* I1 z3 \# x) t
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 E! ?3 ] t9 S6 r! r4 n
UARTGets(ch,2);
% h6 A0 j3 l$ p# z
UARTPuts("\n", -2);
" {! g4 {% k/ e
- [- F0 x% d" l, E- n
if(ch[0] == 'y')
4 G$ A6 H' w5 u( m" ~, o: M
{
9 e! @6 ~6 h. G2 ~9 ? Y
/*打印全部读到的数据*/
& d* N3 d) q# u9 _' q6 w# U" k
for(i=0; i<upp_frame_size; )
4 F: k- P o e$ G- R
{
! x; D- I# `/ C& f* v4 M4 k
for(j=0; j<5; j++)
( r& G" u( i: W
{
$ Q3 G4 U. B2 k3 o: f' h( x
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ p. A0 a( D5 E. Y( T/ n
i++;
; W2 v0 W1 @5 B/ G$ n
//if(i >= 4096)
6 k( U2 D* F: w/ |
// break;
+ r7 r+ A% N; b" c2 T. T" Z0 ]
. h0 H2 O0 i, T# w$ |
}
- k: j. B- d6 h9 X0 r! E) \
UARTPuts("\n",-2);
$ C1 l [3 q2 b8 m
}
/ n6 K+ c2 i% f/ @
}
# U! G- s7 _, {4 d9 d4 y
1 U8 E+ n' G' Q
}
p% s5 x3 m5 g% C
# I. y2 ~- B# ^0 e4 o6 _) X
$ a6 z6 w# E+ {/ l+ l
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 q6 w0 [) y1 A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& B) j0 u2 o% t& S( M* a7 K& W
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4