嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' j5 ^; v! ^: S, m
Void UPP_TASK(Void)
# C1 D% ?8 {; C5 y
{
) Z { P' y$ u# e; i& m
0 A5 b0 E# M6 F7 E
int i,j,k,target_int_count=2;
; d2 I: _+ u+ m$ D* Z& \
char ch[2];
" r, a) z X4 n: f
6 q. ~( q* H7 b6 H9 {/ g1 D4 \
% V2 q" E# ^+ [5 Q- O8 b- G
. P( Y: F6 U: ~) n0 U" r: D
upp_interrupt_count = 0;
* t$ ~( g. f D4 m
upp_error_count = 0;
+ J* t6 V1 U Z/ M' p. d
" H% p( p# T) k' W+ b
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! ^# x! n: ?7 y3 \
// Initialize data buffers
T7 e5 r, L X7 }6 m
for (i = 0; i < upp_frame_size; i++)
6 b! t Q( w0 K
{
2 D- w- y4 ]# f) y
upp_buffer_b
=i;
$ Z. P# C2 |" K/ a
upp_buffer_a
= 0xDEAD;
" f0 P8 ~2 J* |
}
, N+ J: k( K" e% ~- Z/ Z9 A
' G" a5 X+ C# U% \) A, |
//for(i=0;i<1024;i++)
; o% s7 A/ N) l: c/ o
// temp
=0;
/ F5 T; D$ V, m- u0 X4 M; }0 d
f5 x+ |, o' T
//UPPReset();
* `7 U- T& j; W6 o- c$ o
/*启动UPP DMA传输*/
B2 g1 Z" s; J+ v% B
UARTPuts("upp_prog_dma_i\n",-2);
# f, `/ m0 O1 N6 p3 E
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 s7 s( _/ _* K) h) k; z; R- O6 G
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, ?$ ~6 x) u) _8 g, W8 l
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* u, q- `& }% K' p' f
. F% n" y2 p) U" H% e1 C6 z1 V* a
UARTPuts("upp_prog_dma_i\n",-2);
5 w, K7 F+ o' M/ m: A) l* b- b. {
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( D8 S J% C/ a `) {. u) K
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ X/ F! F4 S' y! j4 O
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# G' C0 ~5 p- x5 W4 S! s
! o# z8 i! ^1 {
/*等待UPP传输完毕*/
8 i2 D! o. h0 g$ I# f
//i=0;
: ?& S& @* u+ W& U- P
//j=0;
$ A1 C$ t. M$ L5 i- D
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 E3 F3 G/ M. _9 X. A- I* d6 E
{
+ O- }$ V8 F# c7 N( [# e
/* 测试UPP传输的同时操作普通DDR数据
+ U! R& d( }7 ^
temp
=i;
% y& s w) i0 ^; `7 o
i++;
5 ]- c: l [3 M2 ^3 p' `! {2 V
if(i==1024)
/ a; a O6 _0 R
{
% n' A6 a; S0 I4 S& O+ I$ C0 v. a
i=0;
" u/ |6 \' G) v2 X, m$ m
j++;
* K9 K$ B0 P$ D! L* [" ?
}
5 {/ L, K* I2 ]' f. d
*/
3 S0 M+ K w- P) q7 J
3 k. ~: U: N& Q9 ~( e% _( l- L) m
asm(" nop");
0 I6 a/ P6 z+ x: I8 U5 T0 ?8 F
: a& y7 z* `9 T6 `. z9 Y1 f2 K
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" g+ W! ]" _+ {' V: z! s v: Y1 G9 V
}
, s) ^9 E' L; _
# R, E8 C/ {# J M& C5 A, O
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 \% o0 q6 P6 A. V0 r
//UARTprintf( "i=%d\n",i);
; q" d x: c6 B. E6 v
//UARTprintf( "j=%d\n",j);
. ?+ x0 {+ K8 m9 J7 I
UARTPuts("Data mismatch in buffers.\n",-2);
- A, K% q. p" }3 k8 s
if (upp_interrupt_count == 2 && upp_error_count == 0)
. y' P5 z; Z/ ?' g& g
{
5 b. B/ s9 r7 o' A: J) o
for (i = 0; i<upp_frame_size; i++)
1 s% ]. X% ^$ m) F; M, I
{
% D% J" D+ C1 O' m
if (upp_buffer_a
!= upp_buffer_b
)
0 Z- p6 N6 u4 \6 c W+ x. K
{
; W) |2 c2 |2 o! P
upp_error_count++;
3 ^1 P9 b3 N; d7 {/ c6 i. G
}
& e; j0 o6 Z6 E1 B9 g
}
1 O& x, Z; n2 }# |0 T
}
) M' C; Q3 Z8 q4 ]3 Z
. ]% k/ X, [. F, k* Q
/* 报告通信结果*/
0 `# ~7 X8 Z) }. e( v
if(upp_error_count != 0)
( A; H. W7 `$ u7 ^# G" F; F4 S
UARTprintf( "upp_error_count=%d\n",upp_error_count);
[# ~! }, k) [
else
. R% _* F7 b% r% c4 K, y
UARTPuts("uPP transfers complete!\n",-2);
8 M6 A! r! l2 H. ? d
+ R: ^0 j( ?4 H( F$ C
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 p% H" w; i1 R, H& q
UARTGets(ch,2);
% y! _- R5 l% m5 K p1 W* s" v
UARTPuts("\n", -2);
+ Y7 b( T: i9 N6 B
! C: e5 g5 ^3 Q' y3 b# T
if(ch[0] == 'y')
7 O Q3 y+ x' h: }$ r
{
' D2 [' o! _% J6 ?7 {$ m# G- g
/*打印全部读到的数据*/
/ `+ L1 L( B. C& |! J7 T
for(i=0; i<upp_frame_size; )
6 b) z: k3 O( Y; _
{
) n9 M8 v3 }4 x0 g4 i
for(j=0; j<5; j++)
: Q1 u/ v. c+ ]: s' e/ w% A
{
8 F9 L, s4 q: }- |( c& ?# T. O: N
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) j4 B& A' e! W9 b
i++;
% U% F/ v' D% Y8 C, c1 V
//if(i >= 4096)
- b' |9 G( W; Z6 f
// break;
+ M8 e/ D3 A( r( a
$ P& g6 u" b' y' @+ w4 J6 E
}
: B8 n# C2 f+ B/ j& i2 u
UARTPuts("\n",-2);
# d: Q6 ^/ ~& U- m: {, _" Z
}
) K- k( j3 T2 ?; y" t- I& L7 r' B
}
# Q2 I: n; s( G; v9 ~
/ |6 p" h5 P& \: P4 _
}
: K% w0 y6 p$ x7 b
2 `' |3 g" n. M6 }
4 g7 U* e8 H3 U- _$ _! h( O6 w
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 E) D- ~, C. |+ a. @5 V I9 P, w$ w
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 B# P: f7 l! a# J5 K
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4