嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# C4 Q5 T {3 X, d3 Y/ |; l0 @+ N: n
Void UPP_TASK(Void)
: X+ ^+ a# b2 L1 H/ F# r$ P
{
& B' C1 _' _* n7 z
0 a, c6 Z5 M0 E5 Q, C# i# V
int i,j,k,target_int_count=2;
$ z1 V( E# ~' ?& n/ x: P7 k( v
char ch[2];
3 [9 r7 q. ]" w) ^" e/ A) b
7 A2 c3 r- _4 ?: a7 {
2 ~; U$ D1 @/ L+ |5 w/ t
0 c2 T! R8 P, J! K! F3 c" k, n
upp_interrupt_count = 0;
, V% l, |( r; O7 J- ~( I# r; Q
upp_error_count = 0;
; K. W, u! t. R/ R7 l+ u" j
% w) p5 o. ]& U; ]4 Q* F% T
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" f6 y/ F$ @5 L
// Initialize data buffers
( v: }1 a U# v* B+ r* I
for (i = 0; i < upp_frame_size; i++)
5 i* O) f( M$ P- Q& |4 V b
{
/ X% ?% f% U8 [ }$ `
upp_buffer_b
=i;
3 g; {. R9 a" F& _
upp_buffer_a
= 0xDEAD;
) V% A4 F ~5 d* x4 f
}
! o8 M; i4 l q. x, B* q* K
2 |4 p+ ?& O% T: f
//for(i=0;i<1024;i++)
# L9 p H4 q- v# @2 c0 F1 @
// temp
=0;
& K* O2 b! r5 Y' u V# M/ b
. q$ {: x9 g- `" c1 }% L6 u
//UPPReset();
& E, N( U6 e3 G
/*启动UPP DMA传输*/
u5 K% A1 p$ Q. X
UARTPuts("upp_prog_dma_i\n",-2);
+ e3 N i6 m- T& _7 w
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ Z& u9 d# v6 A* T0 C+ ]% Z
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, i) W: h( S7 }$ Z2 s
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& W8 R! t; [/ v( n* \" K! D
$ R# J) \) i% q( y
UARTPuts("upp_prog_dma_i\n",-2);
( q$ V( k' O F2 t: l0 `8 ]
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 x! W; o* w! q- n
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 c# q8 @ T7 L# l O1 [
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 ]( V0 C3 d4 H" Z# F
( O S% r6 x( {# p1 D j; r' }3 ~! g
/*等待UPP传输完毕*/
3 Q6 ~+ m/ q9 e. d
//i=0;
6 H6 P/ r* C9 m& o3 c
//j=0;
( N5 {: S; I* J9 C0 G: \
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 P! T+ p1 f. w; `+ f
{
) S8 F8 F6 c6 k ]1 K5 E
/* 测试UPP传输的同时操作普通DDR数据
3 f+ \. I- E- M1 U7 u
temp
=i;
* m: j p7 k) R- p5 O3 k
i++;
6 E" o) |2 M8 \6 U
if(i==1024)
! S2 w8 C1 ?( k
{
' @& K' t; r+ @8 o
i=0;
8 Q% J j( P F, c
j++;
: `& p0 P; a2 Z
}
' J7 k& B9 [9 h# s6 n4 ?/ |
*/
9 K3 y$ ]; U m6 ?1 m; }1 b, F
7 F) Q( u4 n' d* e- v2 f
asm(" nop");
, s5 ~) J5 V6 o: H& _
' B; Y7 R- ]! t4 {6 @2 u8 J
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ o2 f. d1 M, }9 _0 g
}
; V# f& v& w) a1 W% M0 b( S
' i! c/ l5 ]5 v! T: i# M! }% O
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ A) q- c/ T% f3 V
//UARTprintf( "i=%d\n",i);
8 c: x" | H* g* u
//UARTprintf( "j=%d\n",j);
5 o) {- e) B E5 m# ~1 G. W$ g8 l: q
UARTPuts("Data mismatch in buffers.\n",-2);
7 L+ U; e1 O1 c! N5 n1 K( K4 |1 W7 h
if (upp_interrupt_count == 2 && upp_error_count == 0)
$ Y+ H( V, Y9 `) ^7 z2 f0 }( z- o- }: K
{
4 Y9 l1 Q& i2 S; J8 U, `% b
for (i = 0; i<upp_frame_size; i++)
/ F- d8 A+ e- I' ^: Q2 A7 G0 j8 [
{
7 S5 \& U: u+ O/ Z9 ^ P
if (upp_buffer_a
!= upp_buffer_b
)
: ?3 j+ [+ r$ @6 k# _
{
; o a6 _- q$ B+ s6 H9 a1 \
upp_error_count++;
/ s9 B1 e% i' a) [. l5 ^6 h
}
% @) R3 \; b0 [# \2 [2 D1 X
}
6 q! P$ l- E. w+ P1 p% I8 _
}
5 ?" v' B0 S" @7 g' E# p
( W( O( L# U7 _* G4 g
/* 报告通信结果*/
, ]0 _* ?! s: y2 c( ?
if(upp_error_count != 0)
" y4 H% ^( l4 b- Q2 U9 f) W# s
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( D+ }7 Q' [. H! g
else
# B) A N: D$ m
UARTPuts("uPP transfers complete!\n",-2);
' ?% k, C7 w4 f. i% p
& [0 g( R& T4 ^( j# |* Q: M
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- U9 R. T- m5 n0 [; u+ B
UARTGets(ch,2);
6 x# w6 P' ^; @$ w
UARTPuts("\n", -2);
( z9 t6 ~9 d7 O& M& X
6 x3 S2 F' z% r3 r. \
if(ch[0] == 'y')
# w) F5 A5 C8 a/ S1 b0 h' |
{
. p2 `7 ^' b$ O. V# t
/*打印全部读到的数据*/
7 v5 ?( T2 U, u) K- y* W6 J
for(i=0; i<upp_frame_size; )
# R& a& H0 U3 u% l4 W$ M( B
{
. {0 ]: x N' M- S# g) n& s
for(j=0; j<5; j++)
7 j- l b1 i* A- ~$ r% A
{
+ E! r# g% J: o- y l
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( ~0 o9 X# y+ d
i++;
2 d* q E1 ~6 g
//if(i >= 4096)
/ W' A0 }7 K+ s
// break;
1 u# U* x+ c9 t' |
$ @( g O$ r- y7 y
}
6 @8 s& x0 H& k* d/ }
UARTPuts("\n",-2);
! P. b2 d0 F* \* m: N: \* |, w
}
5 E+ r' B; W6 x- A
}
% ~5 E" ? s: Q; L
. D6 T8 |" i8 M! H' M
}
& e# S& J( x8 ]+ A$ k I
* e4 _+ o, ~( I4 b* [
7 S' d( E- C8 j9 M% q6 d
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) e* e: Y0 f1 e
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
y; D- X% [. d5 a; F) c, ^0 S! S9 _) ~
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4