嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! G3 V+ y* Y7 g; i
Void UPP_TASK(Void)
- U( y. }, |. ?8 L* G- ?; E5 [
{
, d0 p8 e; A2 l* B( `
; a3 N8 k2 t' M$ @+ i/ A" y$ L) g
int i,j,k,target_int_count=2;
8 z& d! k) M3 s9 C3 J. Z" Y h
char ch[2];
& D+ N8 ~" s0 Y& x# m/ x
* y! Y1 L. m7 s" V, E
* z3 {, F/ a0 U# h
: K( J( k" R4 \: E( t
upp_interrupt_count = 0;
$ i' C' {2 x- n, e/ Z3 g5 @: w
upp_error_count = 0;
' |! L* b% t' k6 r/ g0 v# s$ [
9 n7 I" R3 b5 e6 |
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! E" u# f% j2 ^9 v \1 I! u, Q
// Initialize data buffers
! w8 K# T% @7 a+ f
for (i = 0; i < upp_frame_size; i++)
( V) m$ J: _9 `: ^
{
* R/ W) Q* F/ ^! O8 M% `% p0 A7 ?
upp_buffer_b
=i;
6 ^' `7 P( E# M/ z1 q0 C6 s
upp_buffer_a
= 0xDEAD;
+ b# l6 j8 w- E/ }4 W( }7 [; |
}
/ q3 z K" R9 s: ^
0 z9 i8 Q9 M4 L2 N$ k; Y' E4 w. U
//for(i=0;i<1024;i++)
$ X, c% f6 W( @/ h- l
// temp
=0;
: Y4 l3 Z' i" j/ {
# j3 m5 ^: ~( O* B
//UPPReset();
% {% d: w" g; o6 L7 g- [
/*启动UPP DMA传输*/
/ \2 [5 D+ i0 u! H2 X2 N4 n
UARTPuts("upp_prog_dma_i\n",-2);
8 j9 G4 O9 ?4 @4 K' O6 T. E6 p$ R
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- Y) U$ l' d0 M. R8 r. e
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) O/ @8 h/ m7 F) j4 N) G
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 O! f( K: }; `1 `1 H
% f2 Q# k5 `7 K+ f4 ^& a% b
UARTPuts("upp_prog_dma_i\n",-2);
) M0 _1 [5 W4 o: b
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 D/ g7 x" f3 K6 a# X2 y2 c% C! v
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 m! l# i- Z4 a0 ~/ X9 Q9 v
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 \# k. K. T+ j7 g$ N
- |+ j d0 h% c
/*等待UPP传输完毕*/
1 P3 ~3 m3 N- `/ D, m
//i=0;
; }1 _0 C3 J* M& p2 |. x
//j=0;
! [; l _2 z# Y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* F- [- _. f3 F
{
$ R$ l1 V% x% j# u; m/ b
/* 测试UPP传输的同时操作普通DDR数据
8 k. h# Q8 U, d! q1 _
temp
=i;
1 y; \! R' Y% M, p. Y: j
i++;
/ A+ y) Z+ b, X$ n& U
if(i==1024)
" W' B- P" Z3 Y& U' }: d
{
$ k, P9 ~ w! x
i=0;
- M" q7 H# ^+ G- y3 C/ B. }
j++;
' e8 @- j, s9 D3 X# Z7 h3 Y! Y: f+ k
}
z0 a$ e5 y4 e+ `3 j* B! u/ }
*/
& \, k v4 k: R6 h) j& Y7 |1 |
! S: n9 y& y0 m
asm(" nop");
/ Y8 r$ w) M; J" G4 s
, L( e/ T+ m0 ~( L' N; l
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 j0 B5 T! E8 f! f
}
: I) O7 L/ b* J' t* N% ?% z
8 E6 }( ?% n8 [+ P. W
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 A/ Q3 y% J3 C: U- S4 ~: X" j
//UARTprintf( "i=%d\n",i);
* k2 E8 U0 p1 K. K* z! ~- S
//UARTprintf( "j=%d\n",j);
( J$ r8 ~# K4 [; V% W1 ~
UARTPuts("Data mismatch in buffers.\n",-2);
8 l4 O8 X9 X" \) o8 ^
if (upp_interrupt_count == 2 && upp_error_count == 0)
3 x) ^; U* y* e& E
{
8 T% T* X( z0 F r
for (i = 0; i<upp_frame_size; i++)
: i5 }5 [0 f: ]6 o4 e3 N n( j3 ]
{
6 _. M( F1 N9 o1 j' D( x9 `
if (upp_buffer_a
!= upp_buffer_b
)
: }- c8 O6 b( t
{
* [% i1 x' b6 v3 ~; \' i# G
upp_error_count++;
7 I3 Y9 z4 f4 Q5 j. r+ I& Y
}
* l- L+ m9 @( q+ ^0 S( @
}
5 b5 }9 ?. a2 ^: J- b0 ]/ i
}
3 a5 X' E* _) o8 E0 j; g' m/ p( B
4 X/ e* ~ i M' x( l" B* @
/* 报告通信结果*/
, `, o& k% G; \& H$ m3 Y
if(upp_error_count != 0)
8 _- H& K# u" [! h: C7 F
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 {* E/ u2 S x7 y
else
/ K. I5 Y& J4 X' t
UARTPuts("uPP transfers complete!\n",-2);
$ `* }& a5 S; y; q- n( H
% F; w: p1 y$ B( u% O9 `) y0 Q# A
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& T% Y4 M' T1 W3 J6 d: G7 ]
UARTGets(ch,2);
: J2 D9 R2 E* R
UARTPuts("\n", -2);
+ D- N: `7 {9 G2 f
. Q/ j# K3 @4 A V* w, z @
if(ch[0] == 'y')
$ j4 K( h6 d( J
{
6 _( j# Q7 U; O% W" i
/*打印全部读到的数据*/
+ ^/ ~* c$ l+ T+ E" y- X
for(i=0; i<upp_frame_size; )
2 r! F! G; P4 d+ j4 n) G
{
& \7 Q x( M' F7 c
for(j=0; j<5; j++)
9 ] l1 |6 Y( _, [; x( }, c
{
8 A; w3 {% Y- l" ?7 M- S
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
" ~( L" Z% d. g* l8 p0 |$ K
i++;
- S) E+ [6 v2 X9 H3 R8 z2 v
//if(i >= 4096)
' h/ f8 c% U$ W7 I4 o
// break;
$ u7 }3 G n+ N7 Y9 N5 Y
/ c9 j) h+ V) Z" |- C# l- \3 i
}
, H4 _( @! H0 b! m. `9 m/ G4 A, H
UARTPuts("\n",-2);
L6 C5 ~; P% _# M
}
" ~" V. n5 t6 T+ y( B
}
7 h6 h; ]5 n6 N' K% X: s2 ~; Q
; H0 F2 T' N3 z3 G+ F8 s- k
}
9 X/ M. H4 d; A1 j- ?$ R, }
, _( A3 Y# X5 \4 b* h
# z G7 v. X. P# G! b5 H: [% r0 K
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# o: x8 y3 S2 o* _' D8 Z: j
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 `% s# H! N! c, c, ^% C
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4