嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 j$ n. H& @9 c6 f
Void UPP_TASK(Void)
) D' L$ U; i' T" N! R
{
2 ?' x+ ~) ?7 N, w$ c
$ t+ }8 B3 D. k6 c
int i,j,k,target_int_count=2;
q( v% C1 T% s" n# W: u
char ch[2];
# ~+ S6 g6 u: X7 g3 G
+ Z7 x; b1 \2 _9 e9 @
# r4 v6 M( }, T- c
7 Y" R4 U* N& _2 r% \! ?
upp_interrupt_count = 0;
' Y( N1 r0 t0 N1 y" [
upp_error_count = 0;
E: y' h; g) }+ a8 d
( b2 M" x! H6 U
UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ s) N( E; [/ B
// Initialize data buffers
" ]* P- v4 w5 } s4 k! s! @
for (i = 0; i < upp_frame_size; i++)
U8 V' F+ ?1 ~' }2 `
{
! _6 T+ R( V5 x( u4 h
upp_buffer_b
=i;
2 K. T9 d1 O$ c# {
upp_buffer_a
= 0xDEAD;
/ j6 z) a. i4 M+ a1 u6 q0 P9 y& N
}
7 j, H3 [0 x8 w; |4 \
* K; a3 i) T0 H. h! ~4 h/ W
//for(i=0;i<1024;i++)
6 g/ T" |% M% g0 s7 m1 x% `
// temp
=0;
1 K* d7 p- z4 H# \
/ u+ `. }7 s) k" M S2 @9 I# |
//UPPReset();
1 j$ e7 S/ `: t: Y% d
/*启动UPP DMA传输*/
C0 m9 C9 j9 v& D% \; Q
UARTPuts("upp_prog_dma_i\n",-2);
- I y5 g- |& C Q$ D0 _, D) l
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! E/ T7 p! G7 q. ?+ A1 f* s$ d Y$ n: U
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( H0 _, V% I* u# a
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 r) P8 G( Z# j) ~
% u5 n' [: g$ L7 u
UARTPuts("upp_prog_dma_i\n",-2);
3 a8 `: H! q, h/ W% s" { O
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! ^) j2 s+ i( U3 \ @
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# b9 d- W- v& r) s
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" _& P1 q, d( w v6 E2 O- X
$ ^* ~9 {' K3 V( N K4 h5 u6 P
/*等待UPP传输完毕*/
- W4 O# d8 p5 C* S, Y0 _
//i=0;
& u }7 x# E$ k5 }$ i
//j=0;
, O5 d! O% x/ r1 p( a; k% Q6 S% `
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 c! O3 Q% }7 Y7 j
{
. _, h4 R4 a" e( H9 u
/* 测试UPP传输的同时操作普通DDR数据
$ |* ] C: T9 O! r
temp
=i;
& w% x; W/ f- N: e7 b' N* J0 w
i++;
! X# \1 |" | j2 @" t0 s. }$ w1 V
if(i==1024)
% h0 g' D7 Q9 {; N$ e
{
7 l& z e: G6 k* w- z* K+ @
i=0;
: O+ n& ]0 H0 A: s' v6 z
j++;
8 ~" C+ X2 c }( G+ o
}
. X0 J6 W" l- l; ~& Y1 m
*/
" a/ b; l6 K. t$ f( K
% p1 ]9 ?" I, T( v
asm(" nop");
5 O/ F- R5 Y u5 ]( e
& l* x' o ^7 n P1 y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" ~% f7 d y1 X* k! F8 A' w1 f
}
5 N# L& W% M: L$ G% B; `, ] Z
) a) G: m/ P: C
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ _6 e( E" _' ^0 |
//UARTprintf( "i=%d\n",i);
" R1 s$ `0 I8 g$ m& b/ K
//UARTprintf( "j=%d\n",j);
0 [. h1 i" g7 Z6 W, s) C
UARTPuts("Data mismatch in buffers.\n",-2);
; w% H3 W1 r5 b" R$ @8 l& k
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 t# n& C3 A h+ d' i
{
2 s) [2 q9 z+ g7 T
for (i = 0; i<upp_frame_size; i++)
3 m- C4 l" Q2 N2 R- ]
{
0 O0 q: v+ T& }
if (upp_buffer_a
!= upp_buffer_b
)
) c4 g9 u* z2 q! e
{
3 V0 S& \4 q8 a1 n" H) |
upp_error_count++;
0 X# N; S: E9 ?" v! p0 r9 P) d" q; n
}
/ }6 L9 A; ^5 ~+ A! R
}
1 _' j' |7 E: o
}
( o+ r2 j! s; |
$ J0 u9 d7 C7 P) S5 f; y
/* 报告通信结果*/
; h& ?4 p+ p$ l! ` [, F5 r2 L
if(upp_error_count != 0)
8 J- D/ b3 |0 u
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 g/ N5 j9 R& l
else
2 `+ r/ U* `" N+ ]) g: H8 R4 ?
UARTPuts("uPP transfers complete!\n",-2);
3 L" r( }7 E( N8 c5 U
2 g! `1 w& w! v7 ?' h" R+ Q* n
UARTPuts("Do you want to print all the data?(y/n) ",-2);
. N3 {4 R. E* E: H& @9 ?
UARTGets(ch,2);
! v k) i' _( U- h
UARTPuts("\n", -2);
' d1 p1 y! S$ Z* _
! N3 J v/ L6 n6 A
if(ch[0] == 'y')
* d; x" k/ v3 ^( u* [
{
6 n6 h9 A# i1 E$ U8 m, {3 g
/*打印全部读到的数据*/
. {& v! u% f# ~1 M
for(i=0; i<upp_frame_size; )
' y) @: E; C7 p* V3 h; H0 C* S; \
{
3 ~8 p! _9 u0 n7 W
for(j=0; j<5; j++)
0 b. c6 n( M" w3 I d5 |
{
. D; Z1 u! g" |- z( |6 G: Z. z
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 C% ~* A% t6 J z9 x) M, Z K
i++;
; q* w* p5 B" ?7 _: P; O# t4 E
//if(i >= 4096)
' v& {& Z+ j8 K2 h+ O7 s
// break;
. D2 v7 z6 o% X R
; b, f" h$ X- a7 k! L( w
}
- W( D9 {% x/ r/ K7 H! \
UARTPuts("\n",-2);
/ F& ?1 u" X' O) d7 T; r
}
1 I3 N/ d+ ~# Q% S' L
}
3 e% u: N1 ]" Z3 d" x3 A
( O& u* N& O& z1 e
}
: Z+ k9 d" e1 k7 o8 y% \; G
0 o/ d$ _9 E& G& g: h7 ?: B4 b
& h# k( f2 Z# z5 J
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, C7 E) P! g; ^2 K
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' _* I5 ~) w9 r2 o8 e5 I
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4