嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( T3 i2 w) w$ ?. q2 V
Void UPP_TASK(Void)
# {) h) R2 H8 E% R
{
* \1 A9 [( W' J7 K0 M
7 X) `- q6 q- c1 D: }3 B
int i,j,k,target_int_count=2;
( I$ Q. B9 b$ {+ r, d: q
char ch[2];
% t \; N" e" w* R$ x
. B! u- [$ c! A0 a2 V
$ t* o1 @5 N# O) S
2 b& i- B: c5 j6 D! |
upp_interrupt_count = 0;
, o. k# [- J& S8 r
upp_error_count = 0;
, _, ^' y4 ^" D7 } v5 x! v
8 G0 w4 k3 a. x& |7 `
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, ?2 }: P) l! n% e7 x. G3 {6 v
// Initialize data buffers
0 E$ s" f- Y; {" `
for (i = 0; i < upp_frame_size; i++)
9 b% X! o# e2 g8 r4 M
{
* _9 [: U3 @; C* E
upp_buffer_b
=i;
3 j/ x; h3 c; a8 X$ U4 ^
upp_buffer_a
= 0xDEAD;
; @7 M! e) y% K
}
& H# q& `( a' c0 j
' m- }9 |. h2 a6 g% O
//for(i=0;i<1024;i++)
/ n1 M( t; ?2 ^4 \0 ?! ^
// temp
=0;
: i. Y! {4 n' F+ k/ K x
9 h+ E- s% O% C; N1 q* O: B
//UPPReset();
/ m4 j4 Y1 p. r
/*启动UPP DMA传输*/
: r# M& R7 P% m/ G/ _/ ~7 o
UARTPuts("upp_prog_dma_i\n",-2);
9 ^; E9 r* W \( N7 `
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' k4 d) G7 e" } Q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 |4 E" d- a5 O2 T& q/ @5 F
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% i# H9 c2 D @
8 r3 _9 b2 E" I. m0 W3 ?) ~, S
UARTPuts("upp_prog_dma_i\n",-2);
! @% T1 I. U: X$ x
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" s) X% l& ^0 i: [
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ `" ^$ r, V% t S/ J+ G( o
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* _0 e' g3 t e8 H
- r0 T6 z8 X0 a( ~
/*等待UPP传输完毕*/
( {; _" [ ?5 q& |5 Z! _. b8 f
//i=0;
/ u: [1 U* D# ]
//j=0;
& h9 ~6 M+ U$ d3 P$ O
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 q: P' A R% n. s ?
{
) T* \* v3 W. U5 i
/* 测试UPP传输的同时操作普通DDR数据
' _+ g) \- l' e! v3 B1 _2 K
temp
=i;
$ y3 E$ N9 S) q% B7 n' E- T/ F
i++;
; y4 Z0 {) L6 _# J: B
if(i==1024)
$ C. {% s2 T/ \/ ^# U
{
& Y: c2 b( ~% \3 {! r4 e6 J
i=0;
' |; P/ ^$ q1 F
j++;
7 ^' X; I' T" o/ m/ y- [, |
}
8 L; Y9 {3 G3 f
*/
$ U) ~4 \4 [- h% H! n- s
6 Y( i- D _" H, w, n+ q
asm(" nop");
$ k% ^! l& V" q: X. @( t8 \0 X
/ v. j7 h! Z. V8 H; n
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- Y7 b8 @% ]- O F d. T2 ^
}
. N/ Q- E1 h% _' ~3 e1 n
5 N5 f: k* N0 f0 ?: H: f9 v# B
/*检查UPP传输的数据是否正确 (loopback modes only)*/
- M( t, s# A1 j. B9 Z) v/ i
//UARTprintf( "i=%d\n",i);
% W! Y: G$ @3 W. C
//UARTprintf( "j=%d\n",j);
6 N$ [5 n K& z! F+ F% _$ t$ U
UARTPuts("Data mismatch in buffers.\n",-2);
! C( F% Y% G. _0 j1 e7 o2 G2 ^: ]
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ X& \% A& A4 m; B
{
8 W S2 n% g2 W6 M4 w" z
for (i = 0; i<upp_frame_size; i++)
$ }% j5 k+ d" h4 A" m, N3 [1 S/ [
{
. v' ~% }* ]' D/ r/ | J5 H/ ]2 c" x
if (upp_buffer_a
!= upp_buffer_b
)
) u9 y; F1 G; n2 M" h, \- G7 [* F( d/ z; I
{
) R% Q/ Q4 |" g% d# |! e
upp_error_count++;
! y/ ?, _: d, X% y; H
}
+ |7 s7 W& c+ |6 O5 y
}
8 v2 S% I/ C3 |3 e$ C
}
) x8 f2 z, N" Q8 \
o: X B8 Y6 u% N0 @ w: n- V5 H2 j
/* 报告通信结果*/
3 d+ O0 d6 ~: W+ X
if(upp_error_count != 0)
' _7 z* N" O4 @. g
UARTprintf( "upp_error_count=%d\n",upp_error_count);
, ]! F9 [2 z; |0 ^
else
) M. r$ P. r/ P9 x1 |' J9 g
UARTPuts("uPP transfers complete!\n",-2);
' t! ~# q# n' p. K, o; t' v1 H1 _
: q. l) f3 Z7 Z; q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
( \( z) D( ~# @
UARTGets(ch,2);
4 h6 x& j( j x
UARTPuts("\n", -2);
9 v+ U+ c: P. c( j) _! z m+ c- L
! G% }* q! m. u9 \
if(ch[0] == 'y')
* C$ Y3 \: \& e
{
4 r5 N% B, W' ]% k0 n
/*打印全部读到的数据*/
: `$ K5 m8 a8 y% O1 Y2 ?. x
for(i=0; i<upp_frame_size; )
! A# i! @1 p8 ~$ K+ K
{
: T, Z# E# Q1 Q9 ~' O) R
for(j=0; j<5; j++)
1 A5 E, G+ [- R0 i! c: X1 t! F
{
6 ^1 G# a7 l" t: v2 P9 E
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 ?+ _/ H+ U0 v
i++;
" h8 Q$ I$ |; m9 l4 T+ Z/ N
//if(i >= 4096)
' G( m1 N" \3 E3 ?/ m7 m
// break;
4 N2 O2 |" i( A
* m' t) ^) ~& R6 ^0 f7 ^6 J* c+ m
}
' u7 x- u. Q3 w4 [
UARTPuts("\n",-2);
$ c: K2 A; C8 l" `
}
1 o: d2 o( a- n( ^6 [! O
}
+ g1 O7 y. s; T" U6 Q5 I
. V9 K# U# H1 V) ]% y: c4 Y
}
1 p: @9 ^' K( M5 a b- w
2 M; a! z- B% F* f5 Q! R
1 Q% d. e5 \5 Z( L6 ^
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ W5 R0 o/ G1 h, I& G
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) @/ `! \) i5 X( H
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4