嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& ^" E, Z: Z7 x) A$ \" _
Void UPP_TASK(Void)
8 o; B7 g4 R p3 x+ L
{
5 c: m3 o: R( G- `
3 ]( h: {9 D9 ?$ e
int i,j,k,target_int_count=2;
( _6 {6 m$ f* H
char ch[2];
1 }! m, y* X* z$ y
8 M/ t3 }3 K) q
c" c5 Y; J+ [# n
5 ?8 f$ E6 w8 E2 R
upp_interrupt_count = 0;
+ A! f8 X2 |1 d. F
upp_error_count = 0;
( |) d; s( j+ H9 I: n9 L
Z1 z( S, Z" J, v* b- ^& D5 o- c/ k
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# R; H' c# A6 W! X% u6 J& f
// Initialize data buffers
7 B: z' `* P& y6 I. _2 d2 ^
for (i = 0; i < upp_frame_size; i++)
: r( I! f( o2 @6 C+ z' _6 N
{
& V7 W+ r h' B, J- D
upp_buffer_b
=i;
- j' j6 L. q1 }0 m
upp_buffer_a
= 0xDEAD;
: @- U7 K/ ?# C; k. L4 y% y; k
}
$ r: b( r% t% N7 k: Q6 ]9 Y
3 P* U/ O) [; n8 T T/ B/ Z2 r
//for(i=0;i<1024;i++)
' ?7 Q/ \) V P; F" ~
// temp
=0;
0 m3 z0 q# @0 g" C8 k) @# g
t' S& s8 }! Z' ?0 }. ], J/ J
//UPPReset();
4 H3 U! k# A8 ]7 Q3 T- `
/*启动UPP DMA传输*/
! _. Y2 X8 x1 L$ _# S \
UARTPuts("upp_prog_dma_i\n",-2);
: u8 @' i0 e1 Y4 M: r* g
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' y, ~- S% j/ F- \1 D. ?
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 W7 R! K& S( Y3 B6 Y
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ h. Y3 M9 V! f. G0 i3 Z* X$ U- k
% g0 J' l. e5 _8 f: j+ Z9 c2 ^3 O
UARTPuts("upp_prog_dma_i\n",-2);
8 m0 \9 D9 J! L. D
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ a' @! V" K5 t H. k
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, w5 a1 t& y% ^; k5 M4 t
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 M" I+ y' ^9 D/ j$ x3 \5 h, r0 H* Z
( v% f/ R: |1 x8 y; Y3 L
/*等待UPP传输完毕*/
* ]1 S8 S/ G& i! f; w' L$ U4 @( v
//i=0;
0 D; v( m. I, V
//j=0;
/ ~. C4 C! c! H, C- y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ u' {) w- l! I
{
$ T1 D8 z/ x# ~8 |
/* 测试UPP传输的同时操作普通DDR数据
! R+ n8 W2 @$ M5 a7 u- G* q
temp
=i;
: p" z) O$ {) w( I, o7 D
i++;
( b5 ?7 n3 m" p9 m+ |) |
if(i==1024)
. N2 V( r2 z Q9 n5 ~
{
! T4 E* E( Q2 I" t
i=0;
- V& b. F8 F; j- K
j++;
7 O$ j n. w2 h" |9 h( C3 g
}
* _. ^( u5 S1 _7 s' z: b5 v
*/
& b- T! ?& p3 r b' j
2 B$ i3 o' n; \" f. |
asm(" nop");
( m2 N+ N0 }+ G ~4 W& W
4 b$ y( n7 E& j, s5 G
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* k" n+ s; O' j) s4 v5 Q! S2 `
}
8 U8 Y( W/ O; w$ M
: Q5 J6 C: T/ u9 n! H, D
/*检查UPP传输的数据是否正确 (loopback modes only)*/
6 p/ }: S4 F8 p+ b4 D+ S6 _
//UARTprintf( "i=%d\n",i);
/ \# K% o0 h3 [2 r E& F& {
//UARTprintf( "j=%d\n",j);
; s. q7 t, c9 m2 r5 C1 C
UARTPuts("Data mismatch in buffers.\n",-2);
+ ~9 ~2 ? w! `( q/ E
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ _/ P( i/ e P: y
{
! ^1 E) _, c0 h& e$ J# @
for (i = 0; i<upp_frame_size; i++)
; S8 _3 q: Q F& ~( N7 R2 [/ N- i
{
e1 k8 Y* r: E$ |& u
if (upp_buffer_a
!= upp_buffer_b
)
3 l6 I$ l# q7 v3 w
{
* f0 |6 t: ^5 `1 c
upp_error_count++;
8 D0 B/ n, C. f1 p; F1 ^: _! F
}
& _2 d: t( Z# @( K$ R/ w$ x
}
+ ~& V8 W7 [2 t N. U7 d
}
4 Q+ V' {; R1 Q* O" m" `5 X
0 i8 ?8 v: y' g/ R) a1 T
/* 报告通信结果*/
% z% {9 s. m* V7 G& V6 v" Q
if(upp_error_count != 0)
7 K5 t% J' c! d9 W- \8 O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% v; e1 L8 H) r/ |1 M
else
- V& y( [6 u2 l- N: {6 L
UARTPuts("uPP transfers complete!\n",-2);
! i2 S5 a2 {: S- e. Q: B
5 b2 z3 p; I4 Y& x1 l3 I
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: U( e4 H* ^+ C% c5 W; A5 f- D/ a( m
UARTGets(ch,2);
4 `+ e3 G- }0 t* Q
UARTPuts("\n", -2);
% ]$ u* ^) v" _7 p
1 ?5 p. G( `% s4 q5 H
if(ch[0] == 'y')
& ?3 e, x( ~5 ^) I/ @+ g
{
2 T8 A" D7 x, \: B$ Q
/*打印全部读到的数据*/
8 H) H9 f8 \) {& n. k; u [
for(i=0; i<upp_frame_size; )
) N0 b% f6 A( X
{
( h6 ^" v( B& a5 Z8 x! }3 O- Z* D7 q( G
for(j=0; j<5; j++)
7 O+ p3 }- A1 _8 |- L" ?2 W
{
; r; r' Y! t% c9 `! F
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# {& e( S- `9 z) k4 ]& `
i++;
+ r7 T2 k" |% f, q
//if(i >= 4096)
I2 a: [6 e/ E$ m8 K5 n
// break;
7 v) x- b, _, } h
- p. Q s5 I. O m
}
( s+ Y; |) k# C/ ]% Z8 j
UARTPuts("\n",-2);
" M: G+ Z8 E% l3 o$ `9 e4 H" z
}
# _: A3 V3 E) Q! Y
}
5 n, ?1 `" |3 x6 O4 q5 o/ T: ?
% m1 R! Z% p/ g8 I
}
0 c" d) `, P+ y
9 g8 Y5 V1 @- E
% e; r4 p+ s) O3 @( R- f
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ L8 U0 l% \+ P; N. l5 w* k$ g! {, ~3 O
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" c, r; \: `, ]
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4