嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 M* r/ y# P( a% h' Z% e
Void UPP_TASK(Void)
; [9 j" a7 l. j9 p7 g9 t) H: p( }
{
! F; ?1 r5 N; L" G. [, \; g
t# o& @" D8 q1 H! S5 s4 p
int i,j,k,target_int_count=2;
- Z1 y0 d+ @, N3 _+ m
char ch[2];
/ [, D0 y/ X3 ]3 n* ]
6 |( y+ o7 u( K' \7 }: E
$ R5 Q/ O# e4 F: G; f
9 R4 E5 { \- G0 T+ I
upp_interrupt_count = 0;
9 Z; M) [* O6 N# C# D- |9 e
upp_error_count = 0;
2 `. n5 `, q* z d
) ^; O3 J$ {$ k" P& c6 {/ U
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 Y+ w% E- Z9 e, |0 ?
// Initialize data buffers
7 z7 o$ S) A. E4 m% O# Q
for (i = 0; i < upp_frame_size; i++)
) R2 Y p: w7 R- n
{
, o7 X% \ x$ \! M
upp_buffer_b
=i;
0 ~7 C( A8 D6 s' \" T
upp_buffer_a
= 0xDEAD;
- E( g# @5 t7 K) O h0 Q- f, B
}
! C+ w: @% W% y2 D9 }! X0 ]
9 b( K% h6 q$ H9 z `4 l Y
//for(i=0;i<1024;i++)
& |+ P1 G y5 J3 q
// temp
=0;
4 i7 L1 I( [0 ]! a4 Q( s. i
; x6 C$ o. g* e+ f/ [
//UPPReset();
K. W' d2 W( b/ s3 i9 H% i
/*启动UPP DMA传输*/
; c/ Y. e, S3 u/ g
UARTPuts("upp_prog_dma_i\n",-2);
/ E( E1 h5 ^& W2 r' r. v
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" f6 Z: o9 D; b% S$ a# s. u# a; _5 z
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' b$ v" N; l) l0 Z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 N+ P6 r1 e0 P0 B, H( P) o
- Y3 Y! h! K" s9 ~8 }
UARTPuts("upp_prog_dma_i\n",-2);
# n9 O0 ]6 [- S! i, B% m
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 h' Q' T/ z p7 }+ D
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, e" X% D* L7 z/ o1 c
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" \4 p! R9 O! I
( Z& [# Z. y- `# Y
/*等待UPP传输完毕*/
7 D \# J9 U, b8 r2 v
//i=0;
; v/ I+ }$ V2 T, y# E$ l3 o8 x
//j=0;
& U2 W& k" X) a7 [. f& X
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 @/ A9 ^0 m s: y- a
{
$ B1 @& F; j) q; n- }
/* 测试UPP传输的同时操作普通DDR数据
. a3 q2 x4 y7 M3 \6 V
temp
=i;
4 y& N, l0 `* g3 ]9 E: U# ~
i++;
4 v( `& ^5 r) i y2 E# y$ {
if(i==1024)
$ p2 N. F- j* D, l9 _$ f* e
{
/ |, K" w8 n. q9 J8 Y3 c2 J+ n
i=0;
, ]. r/ M M. _: k1 V9 [8 g% m
j++;
6 Y4 q+ \( F: X. b T
}
2 n& ?) ~# b$ R, D" I4 a- L ^
*/
! N! D8 ~# \4 q" L$ w% u4 H6 F
$ C$ x$ a7 }) z; K, I" I
asm(" nop");
- l* I% w ]4 y+ G% ]/ T4 G Y& J
* @, j! Y; v2 n, p" A
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 I6 `, E5 L4 k6 [% c8 N6 E6 l
}
' {& u6 B+ r b9 F! z5 C
4 y5 K% {! |2 h1 t2 M% W
/*检查UPP传输的数据是否正确 (loopback modes only)*/
/ \& H# g( K/ J# l8 p7 b& N8 \
//UARTprintf( "i=%d\n",i);
5 I+ ]0 q# n: \' \7 d
//UARTprintf( "j=%d\n",j);
, G( H5 h) h* q
UARTPuts("Data mismatch in buffers.\n",-2);
+ F2 g k6 v9 n! Z7 o9 E3 Q. U
if (upp_interrupt_count == 2 && upp_error_count == 0)
' o/ ?' t. p" d
{
% r0 I, A; A! S# ]% P; j& Z; x
for (i = 0; i<upp_frame_size; i++)
7 l5 Z; m+ ]% [9 Q
{
. Q# j/ A1 y% U! {0 I
if (upp_buffer_a
!= upp_buffer_b
)
+ S7 ]6 {& q1 s. q2 E) F! D$ _8 u
{
: O: d _* j; D" x: N( }$ y0 q
upp_error_count++;
' i w, L$ H$ D% v* Q8 k6 x v& x" d+ U
}
1 g; h; U9 L& y; h
}
( c* r$ @9 ~( w4 y/ L
}
4 f, Q# d* z$ M* _+ }2 h
3 W+ p! z5 M( r' P# U
/* 报告通信结果*/
8 P' B8 i& u3 j+ x" Z! h3 K6 W
if(upp_error_count != 0)
( L3 S1 e/ v' B! c& R
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 _$ h& i( c. f! W8 T% s/ V% l8 D0 V
else
- X/ R7 j; G: }' P5 V5 `
UARTPuts("uPP transfers complete!\n",-2);
( Y0 _! f; N8 j! v, e- Q5 i C6 P
8 ^5 V! ]/ x' J
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 C4 x( K# d( ^/ m8 C7 x+ S: {( }
UARTGets(ch,2);
& J- B3 P% f. Q9 I0 ~4 W: u
UARTPuts("\n", -2);
7 i. B' y& v$ w) O, J+ i9 O V% [
l7 u/ u, @% E2 K. W
if(ch[0] == 'y')
$ K% [! | c; \; Z
{
1 M# \/ _. `4 a3 A' H) k/ t
/*打印全部读到的数据*/
: e0 l- a: F+ {3 h
for(i=0; i<upp_frame_size; )
! {' B$ T+ G; ~& T
{
3 A' \7 o. |1 i6 f+ b$ Z. F
for(j=0; j<5; j++)
$ }5 r5 y' E! U
{
! l: ` u" @6 g6 R9 u1 Z0 C
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
% |7 Z' }* o- t: }
i++;
; f1 a: W1 F; G2 t
//if(i >= 4096)
2 E. @( S0 c0 Y6 t6 \
// break;
0 w8 n2 g; p6 ]: x' f2 H: ?
4 Y: m7 i; E- p' e3 e7 l) ]
}
5 T& R+ R2 o! v4 f* ^ D
UARTPuts("\n",-2);
+ \1 x$ }: R* Q$ ?
}
! p* L7 I4 Q, V; e
}
* Y* n4 k4 W" |( x2 \. T
" \' J$ \- x( ]7 ]9 A
}
) T' S+ l' I( n6 D4 ]' S; l& G: I
; c( Q7 o7 t4 P1 K& ~* P: x
+ C( e: M" l1 T- n
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 S6 k5 H: x- @5 K/ ~* L8 |! l
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ E4 N' q9 D( h6 {
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4