嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( D4 `* u7 K1 T
Void UPP_TASK(Void)
( K2 h. e2 t) p7 [! B$ }
{
1 I3 f4 j0 J4 i8 J y+ `3 d
4 T T% C7 }5 f! u' m+ [
int i,j,k,target_int_count=2;
8 |, O' c+ }) `! O- S8 `3 D- F
char ch[2];
' H- W2 K6 N+ C& b7 f% T- u# O
; N w" p8 S; H g# u2 D1 j8 n
( V* T" l5 Q y( H% K
7 Q- X$ x7 v& p8 ?" z" v5 I
upp_interrupt_count = 0;
: U2 Q0 w' @2 X# f: T7 c# z
upp_error_count = 0;
. s _9 n4 _ y/ g+ m
( A3 t1 M; h- `9 c/ g
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( Y8 K$ m) V# L0 I
// Initialize data buffers
1 P. q3 }$ a' \8 c) J
for (i = 0; i < upp_frame_size; i++)
/ e. n9 t( t# X9 S7 j0 b
{
1 n- y2 M/ y' ]1 k: j
upp_buffer_b
=i;
# S9 ]+ |" e$ ]' q' e
upp_buffer_a
= 0xDEAD;
2 _" w" y4 W: I; t2 R# P7 ]* X
}
0 d( ~) s5 U; p4 Z; J" a" Z
/ c9 c. t/ H: u7 H9 }
//for(i=0;i<1024;i++)
/ U5 t* d: v G8 O+ L, [5 F& g x
// temp
=0;
: k! u: Z+ I$ P* y; n
% ^5 I+ M$ _1 V f
//UPPReset();
% _" R. e% |& d9 z* P7 Y+ S
/*启动UPP DMA传输*/
$ R- L7 C' P; e. [
UARTPuts("upp_prog_dma_i\n",-2);
/ x1 o; u" f G! d/ z/ E5 ^
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 _* l9 C/ Q: [1 E: t
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; m. ?+ |3 |4 \7 |4 d9 Z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
5 V8 F( h* g6 W5 m
) E# H2 ]2 C9 C# K
UARTPuts("upp_prog_dma_i\n",-2);
9 n0 {9 Z9 V4 {5 c" S0 y9 ^
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, f3 f; W% j4 L _3 r
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, n0 r' @+ J3 g: g1 ^( P a+ ^
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 C9 n: J3 D; P$ E& d
" Y2 J9 E0 h# F9 Z! ?7 l
/*等待UPP传输完毕*/
: b5 Z7 v0 g$ @' M) E
//i=0;
# j- p ]9 w: \/ W/ k$ Q% Q! X
//j=0;
4 P6 @9 {. m* b- A( o1 {7 I' S
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 _+ A r8 R) q }3 ^( S
{
7 p$ E, l, H' F, U. r( L
/* 测试UPP传输的同时操作普通DDR数据
; l- r0 M( b1 ^& h# G# D2 V
temp
=i;
9 ~+ p/ D) D! a3 ?" ? R
i++;
$ g# I8 y5 M' K# B! Z) |
if(i==1024)
5 B9 ^) x3 _8 o8 o8 O
{
4 i! Z- Q/ v1 J4 {) a
i=0;
b$ D d# S+ A2 m/ C9 x3 c
j++;
" j2 U1 E: ]4 U- j- N* U
}
2 N* P4 D5 |- r
*/
; b1 T* K j% ~" A# X2 p8 t3 c
! W& a3 `' [ d5 l0 U8 {& P- ?1 K8 p8 _. W
asm(" nop");
8 ?7 G+ V! W& b
8 p# k1 V" m# E1 y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! o* p6 d8 X9 I/ N# b1 ~
}
5 X% b* v- _4 E' x6 t
, s' E5 J: \( C5 M$ ~# H+ }3 R
/*检查UPP传输的数据是否正确 (loopback modes only)*/
) y1 O0 a1 b+ G9 F
//UARTprintf( "i=%d\n",i);
% y P. y% G( w/ {- k
//UARTprintf( "j=%d\n",j);
+ ?4 B; ~6 S- I1 @: U
UARTPuts("Data mismatch in buffers.\n",-2);
& Y0 `* `- |; X W, K
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 h. J3 a9 d; q. i+ g. b* S
{
1 d1 V i- k* c, J6 ~
for (i = 0; i<upp_frame_size; i++)
$ X4 Y+ A8 G9 |% Y
{
6 s. p! i- B9 D6 |9 Y, g
if (upp_buffer_a
!= upp_buffer_b
)
1 v# |) r+ S- F8 m3 ?! a0 q
{
- E5 i9 F: d2 o4 g$ m: O, K d1 {
upp_error_count++;
6 R+ J$ Z+ G/ S4 _; _
}
/ I3 ^5 F0 |2 ~- y; u& e
}
' S* p5 z) v" K2 t! A5 I
}
- ^" W, p7 f6 }
& U1 { G a) y' f
/* 报告通信结果*/
& B! Y# R8 j& ]* n; D( I
if(upp_error_count != 0)
& {9 u. f3 x r3 w; r
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) O7 c) V8 X5 q+ S! n" p
else
: L" y6 K) i' B% w# \% X
UARTPuts("uPP transfers complete!\n",-2);
+ z- B c# D& F. \9 a7 G( i* h
% v& k5 d6 p; u
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 x) j) U5 P& W; ]* X9 s1 \
UARTGets(ch,2);
8 X: L7 L1 z1 f8 q( O( r
UARTPuts("\n", -2);
" E: A' ~) K7 z- @/ W' T
1 Q) _* f2 Z: ?* f* y$ ^
if(ch[0] == 'y')
4 Y( n. J* x. H6 |
{
" `; d5 r' J* E: Y7 F- o1 A
/*打印全部读到的数据*/
8 a$ C7 [" K' z4 F! A+ R M2 ^
for(i=0; i<upp_frame_size; )
( e' v [ S. a
{
/ w n# E9 s) H+ }
for(j=0; j<5; j++)
( q. Q& b. x8 j ]8 Z7 K0 q* w
{
4 K6 h! _2 i4 h: [; C2 v
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 m0 r/ d3 b8 }! z
i++;
2 ]3 K9 `3 M8 k7 s; ~% i; C1 O
//if(i >= 4096)
1 C* @. H$ \' e% M
// break;
. o0 D, X: [8 p( `1 U- n$ }
" o1 {, ~; b E5 |1 T# E
}
, B' u4 Y8 B' {! v7 Q1 L
UARTPuts("\n",-2);
. ~0 t; ]* c) T: M/ b' Y5 V+ h
}
/ ]3 B* p' W* g! s- `2 Y) a u {" y' B
}
3 Q, N5 A. @; c; f6 {$ G
7 K$ t1 i0 _. u0 A) k% w# q
}
1 j6 u8 t/ B, J2 a; r/ m e& B# A( p
2 E/ {& y% G* N0 _& A, V3 u
: K* v' H, \1 R/ ]
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 U+ H& E% y8 D6 T8 Y) y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 I* H# @- e- G4 z* f1 n& N
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4