嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& Y) \# Y: @. c
Void UPP_TASK(Void)
, V( y ~8 k' ?2 |
{
8 x+ v s9 ^" b
. Y$ ]4 J: Q9 w9 e
int i,j,k,target_int_count=2;
& p) f) c2 w" s$ v) T' z; n
char ch[2];
. g2 n4 X2 Z1 s1 ] z) }; S, ?5 e
5 M: V* n7 V. P+ p
! h) d- X6 E$ |7 ]" p% c! n
. C: I6 q& p/ O# t! y
upp_interrupt_count = 0;
, O" y0 h8 G/ { Y: P( `9 i, l
upp_error_count = 0;
" H8 t5 @* q# `5 P6 Y9 ?/ a
$ {! L; l, l2 P0 @
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 |! P- f/ }- k" r, |' o' U% y
// Initialize data buffers
o* y+ R* Y6 F. B" X7 c+ d7 K4 f
for (i = 0; i < upp_frame_size; i++)
p$ f! z! z! L( z1 @3 ` Y& A
{
' N, } r( t' {, N
upp_buffer_b
=i;
" @ p% Z# l3 y0 K( \) R! a
upp_buffer_a
= 0xDEAD;
+ g2 r7 M* X- ^+ w+ G
}
- `+ s0 i" y- |# l
3 ^$ |! @3 j+ R
//for(i=0;i<1024;i++)
3 f) y# E- X5 p2 p/ H1 `
// temp
=0;
8 a: Y: _: V7 }1 n( c U
2 b) [) P7 C. w- G5 \, S
//UPPReset();
# {- _7 e, e% t% `
/*启动UPP DMA传输*/
9 v+ g$ C6 m6 b3 K: f, T2 W3 n; }
UARTPuts("upp_prog_dma_i\n",-2);
5 m3 X7 c. }( p3 R$ k4 ~4 ~
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
0 ^+ q; ?( o* e
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" u, W- z% \ s
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 D5 V+ P* i, Y
@+ @! o# G5 }$ O {# O u
UARTPuts("upp_prog_dma_i\n",-2);
9 u( e7 J' h% b) h( c0 c5 i
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 j+ M& W6 J/ `
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; r9 C, E {' d I3 k7 p: K
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 o. k: B' v% n" G8 K
4 t& V% Z! M: U* {
/*等待UPP传输完毕*/
9 d' I% G' Z: I2 J+ {. @
//i=0;
) {' Z! `/ k9 m* ~0 S+ E8 O
//j=0;
3 \! B" P. p! G2 e
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! c/ V0 x9 P" \
{
3 Q; a6 W: U; Q$ \
/* 测试UPP传输的同时操作普通DDR数据
. d- e8 Q& Z$ A& l
temp
=i;
. ~( N, p1 I" I& @$ S
i++;
# Z! {( j0 d1 M- o7 ]9 l4 u0 Z7 e
if(i==1024)
$ c$ D3 J! @, h, K
{
2 u" m( H5 O+ \4 U2 x- ]
i=0;
( y* p. @! _5 M- g' ^# |4 U
j++;
: N0 Y8 B8 g; g4 f' w- W4 b
}
- L0 e$ y9 ?5 _# i$ T
*/
+ D$ [* B+ H% ]: n! u" n/ d
9 e/ C$ S7 {; w, m7 j
asm(" nop");
! o8 J' b7 D- Z6 ^" w3 r6 F. s
0 f% q! H ]" a! @; `
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! s6 {, L( K1 v! }
}
" w. C, Y4 X+ i& F6 W. U% ^
8 @2 z2 I) N- \* p& o
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% |$ \8 ^: P' ~2 ^
//UARTprintf( "i=%d\n",i);
* i; M2 c. D/ Y0 j" m2 Y9 x
//UARTprintf( "j=%d\n",j);
6 ]9 Y8 Z5 _* a8 A9 f* m1 x
UARTPuts("Data mismatch in buffers.\n",-2);
# e, f8 B$ y! E& b- ^
if (upp_interrupt_count == 2 && upp_error_count == 0)
% y# H6 x' U% |7 F$ T
{
; B* U* @5 I% o
for (i = 0; i<upp_frame_size; i++)
( Z0 A; a1 T5 W9 y6 s1 ~0 ?
{
3 ^! A# } i4 g! e& g1 L* C/ P3 s
if (upp_buffer_a
!= upp_buffer_b
)
1 z* ~) t, ?, R; `# ^. z# Z
{
6 z/ t2 Q3 y8 n$ D7 l& b9 n2 b$ l
upp_error_count++;
& f( s) w+ x, [- p1 P
}
5 z0 T! V& |3 d6 t
}
' q' }: L# Q |3 r, h8 i5 \
}
+ u% R; p" ~( m. y
5 J8 z7 g0 p+ s+ o4 V8 i
/* 报告通信结果*/
( t! \* N. o6 B
if(upp_error_count != 0)
9 H6 _" n# V/ Z" K5 x& Q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 [, L5 h) i* Q9 X/ k* i# ?6 h) x
else
4 z" I8 W0 O; R; o
UARTPuts("uPP transfers complete!\n",-2);
8 H! x5 r+ n) f! ]
7 I6 Y0 @! T1 Y2 O' q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& E6 h& U& }0 o! Q+ o# R- j
UARTGets(ch,2);
6 i( {( [" Q& Q1 I8 p4 `
UARTPuts("\n", -2);
' x9 E1 m' q* a* f
: E# z$ ^7 d _3 ?0 E0 Q: F1 W
if(ch[0] == 'y')
6 p- \. w! J# t% B0 {$ Z6 k' y
{
! K8 I* G5 i; H5 j! d/ V# n
/*打印全部读到的数据*/
" L, i& i! Q1 o9 c" E( S. T) b! \
for(i=0; i<upp_frame_size; )
- b+ {; g0 T0 E3 u u$ I
{
# t j* f+ I1 K! s! [
for(j=0; j<5; j++)
( B) a$ L# H! A6 P0 }
{
* }, c* u9 B- n# _6 B4 _& ^ ^
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 |# ?+ s# C- A8 O# v! `
i++;
- J. D; k2 T+ b I
//if(i >= 4096)
1 O3 M/ F' S8 _; g$ Q9 ~7 T2 F
// break;
9 m. B, f/ w. z9 q ~3 Y
! W0 f9 d: n0 c; b( H
}
! M; s* K A7 {' I
UARTPuts("\n",-2);
& U& I. [9 i) N: L# m! ~% G c3 h
}
! I% f: @) V# Q% z' d
}
! b4 `, C! I3 u" r* O
2 x" P, W4 F; G8 Z
}
( L8 p5 E( X7 l/ j' o/ }. A
$ j3 J0 y* k9 a+ E3 H6 t* S3 ~8 v
: _1 L) o" C4 X5 h p9 M
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" E$ H2 h6 x6 ~/ @0 w- J3 w
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 A r" `; q( \* H; F! n& I
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4