嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- E' m+ ~ \6 e4 }( }- ]
Void UPP_TASK(Void)
5 f* i- _0 r4 l1 v9 `6 F1 I, u; e
{
$ W# w. Z1 `) M0 c3 V# b: C
5 S' O( s0 C6 A& ?1 S+ _" v5 j$ @
int i,j,k,target_int_count=2;
* T5 g& W; O( x5 _6 C% ^
char ch[2];
& C/ M/ C0 j5 ~4 T
" u' f; U2 o U8 d- r. ^1 K" O
. j% \; q, e: t( g
( l l/ u( @8 A
upp_interrupt_count = 0;
5 y$ U+ x; Y! Z! L8 B
upp_error_count = 0;
4 A/ r1 F& `, ?! S
H) {0 Y9 R, r
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. r2 j( E; @) D( \( x( E# D
// Initialize data buffers
2 R3 ~8 E. I/ b
for (i = 0; i < upp_frame_size; i++)
: u( `7 M! S! j
{
& F6 {+ u' J$ [* Q1 z$ y
upp_buffer_b
=i;
; O$ R4 |* n* U
upp_buffer_a
= 0xDEAD;
~) n$ @' P8 Q
}
( m" ]. D$ I V! q) g
- I5 H5 R9 F: [5 R* A$ S) {
//for(i=0;i<1024;i++)
& r2 \3 u8 A& x& h- O% t) W a
// temp
=0;
+ y9 E" Z9 G. m4 q& k0 ]
) y/ q: R/ U9 C5 V' @! [
//UPPReset();
$ D! p: ~: n( D% b
/*启动UPP DMA传输*/
! M$ `3 m" P) i. Q9 W
UARTPuts("upp_prog_dma_i\n",-2);
& }# {. L6 h6 F; x8 f# b
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% O- l' u9 j# B t; A
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; [1 x! j% {- _ ^
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! [* f% R6 l4 n% f9 }7 w8 @
8 e9 m1 i' i! X3 `( |
UARTPuts("upp_prog_dma_i\n",-2);
- G0 A( w! L2 Z5 V$ |
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( W% b$ t7 M0 y/ B$ e5 c
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* i' i5 X' r r3 G7 t& t& `
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 l* h( n: x/ I/ g$ z `5 V j M! M
1 m* t! r s$ {8 | `, o
/*等待UPP传输完毕*/
* X+ S% [1 v) ]* }) u# @
//i=0;
5 I; `& C, R0 P8 v/ W5 t9 I
//j=0;
5 @* ~/ @ u3 J) ] z' z7 n
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 _/ O: k. ?& I W7 e3 x1 X: M
{
p1 j% [3 N3 C" E- W+ |7 u+ w
/* 测试UPP传输的同时操作普通DDR数据
! m3 \2 [( m+ J6 Q: z% @- K
temp
=i;
+ R2 ^' t6 F. r" G3 ]5 \% ?
i++;
2 ^% v* H( C. Q0 ]# w! I
if(i==1024)
+ f/ k& I3 h+ N+ ~6 S1 d
{
" a4 v; Y4 v3 o7 Z% X
i=0;
5 X) n% ~, L! X. Z9 b
j++;
5 p3 \! q$ H) q! R- o
}
6 G' j* n/ {4 T* J
*/
+ P/ v7 v! C* h2 l, e6 p8 |% U
9 J& i% c ^* Q; ]. D
asm(" nop");
. |, i% `( |( X, N# o. M# ?
. b) g/ L2 h# H7 G
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 i. Y$ ?( S4 u8 P r
}
4 e s# C6 x" T
6 h5 l' j$ ~- C0 n
/*检查UPP传输的数据是否正确 (loopback modes only)*/
: z6 u$ g- C; ^/ e( I
//UARTprintf( "i=%d\n",i);
9 Y2 O. E- z3 Y' o
//UARTprintf( "j=%d\n",j);
% ~6 S6 ?6 {' K" @ H
UARTPuts("Data mismatch in buffers.\n",-2);
) K, ]* T4 ^* U6 w( U
if (upp_interrupt_count == 2 && upp_error_count == 0)
% \/ Z/ U7 o& d" c/ W& r! Y9 x
{
}6 L$ E) @9 U2 T9 y C& f0 X5 e
for (i = 0; i<upp_frame_size; i++)
" m; X; q5 ]) D% ^: x
{
, t1 C- R/ U! U, t) {
if (upp_buffer_a
!= upp_buffer_b
)
( O2 I" Z1 d" b6 D7 \- m! T
{
8 q0 J: c2 G6 P6 N6 P
upp_error_count++;
! N, H+ T8 R4 Y u% X
}
" A W2 T4 X/ d j! D
}
* ~9 S* `( x- C5 H, ]* Q" \& n
}
0 ^, W& R8 S2 }3 y
5 A: W' `' s) R- y6 z
/* 报告通信结果*/
# J2 l! p" B7 A- G: B
if(upp_error_count != 0)
, @1 _* M+ @' v: x
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% I9 U" b% ^* b7 g
else
; \5 u; w* \6 M0 u, [
UARTPuts("uPP transfers complete!\n",-2);
( K7 F0 a- c, |3 d+ O2 M
5 q5 s9 n0 \3 T d
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: G! l& B; V8 }: ^; h
UARTGets(ch,2);
; e4 |4 j9 q, W" _% }( _9 D
UARTPuts("\n", -2);
! F3 U, c1 v* q6 Z4 s8 K
n* y, R9 a/ K: ?0 O
if(ch[0] == 'y')
- b8 x- L G( ]' e
{
0 ^9 C3 [/ [8 w0 Z4 d/ ^1 m
/*打印全部读到的数据*/
) D) ?% B/ {4 ?8 u1 T
for(i=0; i<upp_frame_size; )
1 ?: O+ W. s& U1 \. ~
{
, n: F) U' T& o/ W: @9 I8 d) E
for(j=0; j<5; j++)
! S* G2 ?+ {- p
{
/ ^6 U* j" a* \" b3 {, |" g" `
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, \) x! G: Q7 Y- C4 u* ?; J
i++;
3 _/ ?* v% ?. B; C
//if(i >= 4096)
5 j9 M7 \1 h/ ]6 U' l2 q# k
// break;
2 c4 J/ N6 X! N, F7 K
7 Y, _* C( s( A6 m; H
}
: p3 t0 O( [. R, W, c
UARTPuts("\n",-2);
" \- E5 q# C6 f. f
}
7 w% x* K5 w, ^
}
3 C; \1 X% }& v I: \
% N* V3 w" t f, ?+ x" U# v' s
}
( N" ^& e* x$ u; X7 u$ X4 N; S
* s# K2 |: c% L, n1 A6 x% d- ^
: |5 _* Y) m! C' p c0 s" j, Y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- Y0 T/ A8 y8 @
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* G. `* z$ S8 D2 g' U- Z. J( b
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4