嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 |8 J; @3 ?* _! \7 e5 z
Void UPP_TASK(Void)
6 y8 e) B" |: l7 }" D) h C m
{
' h! o3 C! s5 {( ]. W" K
3 z$ @# e0 x1 E3 p3 }" o
int i,j,k,target_int_count=2;
( L: T7 E6 n( Z
char ch[2];
# W, h. D' H( b$ [
+ k% e) }) J5 a+ l1 F- v
3 L+ M& S- y8 J g
8 `& `. m& ?7 z) N! G* u% M
upp_interrupt_count = 0;
$ z% I# w" k4 P5 v. z/ N0 _
upp_error_count = 0;
. F5 R. l, P. q7 [8 F
" A5 T2 S+ F& \2 {7 ?
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 s7 g' j/ v, H8 W/ h, Q! |
// Initialize data buffers
( R0 L1 V% c4 s+ K0 h0 ?1 `. R; d6 d
for (i = 0; i < upp_frame_size; i++)
, A" g/ B, E- A/ |0 f$ A
{
. u& L7 }; } s6 [- |
upp_buffer_b
=i;
9 q* [3 I; }4 {
upp_buffer_a
= 0xDEAD;
7 _: U% O. b% M& O7 f4 R: [% J7 j
}
- C( a6 Z4 ]7 l2 \
7 x1 v& Q# P2 K: g0 m
//for(i=0;i<1024;i++)
6 |; }# V( U u! I
// temp
=0;
: K8 m( c; n0 O/ F% H: X# |0 c
: x' B4 p& I' N1 q( |
//UPPReset();
! \. k8 u7 d) ^: S/ |7 t5 y
/*启动UPP DMA传输*/
( b6 c+ O4 F/ \4 w
UARTPuts("upp_prog_dma_i\n",-2);
& T/ O. {! T/ W, \( e( }
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) m. n8 Z8 Z" C
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& k" s. c0 S: o/ k2 _) R: N
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
X0 n& x" n. o/ ~3 ^$ ~
f: Q$ _' Q: Z
UARTPuts("upp_prog_dma_i\n",-2);
# y, e* @* s S& j& W* S
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 c" M& A6 G: k: o# X/ Q% o1 K
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" r* {* @1 t( i, W
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
S' `. M- ?/ ^% D5 ~+ z& N
6 s4 F% Y5 i/ M" Z' t, P
/*等待UPP传输完毕*/
5 i" g# O2 u3 O* o
//i=0;
) X) Z$ ~+ A! S9 u! X7 l
//j=0;
& d$ |3 H3 I9 c% M9 I& j
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% t, j! k: D9 r
{
" k5 b0 h$ H0 V+ B" g1 g$ x( E! \
/* 测试UPP传输的同时操作普通DDR数据
+ r# _4 _, X1 E n; m& T) v/ u+ d
temp
=i;
5 |$ ?% P" s. ^& u* A2 ^8 g
i++;
9 Y! l1 @4 w% A$ j$ }; a
if(i==1024)
. B1 [1 L/ i) [0 z( B2 C! x: `
{
# D: B/ o! y ]8 \% D, E* ?
i=0;
j4 r+ `; r' o8 U0 u9 t
j++;
+ |. J w+ k. y% P. E
}
1 x' s$ [2 i8 ~5 ?/ y/ _6 G, {8 I
*/
9 z1 m8 h) v' C
9 f# I' {* T0 t: J! B1 u8 M
asm(" nop");
, N/ ]6 e: J- Q
# {+ m' q3 e8 t$ ^# m4 J& z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 ~7 s8 e; M4 Z8 @/ B# I" d: C
}
. l: h5 y4 P E* p
& W, f1 R9 h3 Q1 @) s3 G3 ~
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( k5 b- q9 q0 f3 [
//UARTprintf( "i=%d\n",i);
; T5 m5 f. @/ K; b1 X
//UARTprintf( "j=%d\n",j);
6 ? E# [ O' ]4 ] T, V% g6 T2 S
UARTPuts("Data mismatch in buffers.\n",-2);
2 N2 m N$ A6 F$ j6 k5 |
if (upp_interrupt_count == 2 && upp_error_count == 0)
) s9 M- X% `- W, [
{
9 _/ l6 q9 \' O
for (i = 0; i<upp_frame_size; i++)
7 w0 R2 k* n6 r2 _$ D* C
{
0 R. |' n; ^2 |' o8 n) G
if (upp_buffer_a
!= upp_buffer_b
)
" d$ P' L# R7 b# P4 j/ T2 e$ K1 w
{
( l, L5 X7 E) N
upp_error_count++;
; T; ?5 A6 C, ~( A4 S
}
' w" _2 K6 p, T; c, t
}
' D" e: \" |" [+ d3 P; m
}
, I' ^) d/ h6 {2 | X; i
/ e1 k( j6 p) e) L
/* 报告通信结果*/
6 c$ |( X2 `: {- F/ a# \
if(upp_error_count != 0)
( f: o, r6 ?0 S' v3 a( e
UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 n: y; }8 ~ ]* W; J% R: }7 e
else
; e* X- H9 y4 C* u
UARTPuts("uPP transfers complete!\n",-2);
# G, c! ~: N, c+ n9 S5 N' E$ d) ]
& B7 {/ ]" g6 l& z
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ J* c) m @. O) R9 U
UARTGets(ch,2);
7 J$ G3 ]% _9 [6 A8 V1 R$ E
UARTPuts("\n", -2);
/ P( q4 T( c5 t7 x) Q& E: u
2 U7 J. L# m a$ t
if(ch[0] == 'y')
' F2 I! k2 F! x6 X2 U: u
{
0 D$ D: Y. u2 n% h/ ?/ I# N( U- \
/*打印全部读到的数据*/
$ P: A' ^; [# O
for(i=0; i<upp_frame_size; )
( ]2 k, k7 F9 @" ^" x% Z' N
{
9 m" Z F8 g7 g; O% x. N4 }
for(j=0; j<5; j++)
8 c3 q2 C6 k& Z0 g2 w
{
( f |& O j7 C3 b! |5 a* |, b- ^! f
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
s: \& [1 q% @# C( M, }
i++;
& [" A+ y( a: f5 B% @+ A
//if(i >= 4096)
4 l* z% k. q# U: w- D
// break;
p1 x6 }1 H" N+ P) K8 k
- {+ o/ H) ^; u0 E6 x- p' ]( Q! T
}
; I6 {$ \0 i v0 n2 y1 I% f
UARTPuts("\n",-2);
: Q& p7 m- X6 {) C# W' r+ z
}
/ X, d6 v% v) W. u5 m/ b
}
9 ^8 E( e0 R3 f
7 A7 ?( {! ~6 G: A2 \* t, n& o
}
! u- L) |' X2 d& X3 @$ F! t
4 ` z) s* C P6 S. C
* v" n1 R. e/ j( U, |. f& E
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; Y6 D4 r, k+ z1 ]
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. i1 [9 g' R5 ~6 i- T1 C$ k
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4