嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 W' v8 L/ I: f% j6 u
Void UPP_TASK(Void)
1 O0 {- {% V7 z# ]% V
{
3 N- I& V; A' {* ?* W/ x0 R* U* k
8 V& Z8 T% S! T- \
int i,j,k,target_int_count=2;
1 v8 p* T$ n! r: g5 S% v
char ch[2];
+ f& j! y5 u: g. k. s, p$ C, f
8 s) p( O: e9 {5 _4 D4 W: e$ Y f# C
/ @- ]1 {' U* j# L; B, ~
) i. a/ G w" J c
upp_interrupt_count = 0;
. U( k. {2 {1 X4 H! b& P2 n8 ?
upp_error_count = 0;
( ^9 h' Q3 }% P6 |7 n
1 s, Y4 A9 z4 U% M
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ |/ P2 N$ \ k* w
// Initialize data buffers
3 E8 Q& A$ T" B1 Y1 I9 N+ m" W
for (i = 0; i < upp_frame_size; i++)
2 u2 _. b% ]. k; E* J
{
$ H9 d7 k/ X& A$ A: ~
upp_buffer_b
=i;
/ s! }, [5 B" m1 a7 l, U% n$ @
upp_buffer_a
= 0xDEAD;
5 S V' D- p# M: j
}
- g( A+ T- b4 C/ n. C
# s% {* Q2 A6 D
//for(i=0;i<1024;i++)
5 P/ V: y/ S0 f8 H; y
// temp
=0;
, g& z; H0 {+ | y0 p( i
7 ?+ n. m1 {' `% ~
//UPPReset();
D; }7 c ?6 \$ g
/*启动UPP DMA传输*/
6 y- l6 T% Z7 V% K
UARTPuts("upp_prog_dma_i\n",-2);
5 U6 z5 |( M6 g9 C* N( M
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
A0 S* A) J( Q- K6 A+ h/ m/ Q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! ]* J& L% E! M1 n7 O1 q! Y4 S
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, c! |& A' u! D* @- J
y& B* J2 Z9 _- A! y) R
UARTPuts("upp_prog_dma_i\n",-2);
( o L- h' f( b+ J; i7 M# g
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! _2 U3 E2 O( o- p! I. `2 s& q( K
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, { E3 q# S! k
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 q R6 N3 k' p" k
$ W- w- X/ z: A# I$ O0 M& H' b
/*等待UPP传输完毕*/
( }' N4 q5 q. O% ? ^: }- @
//i=0;
* b1 ]9 ]$ C0 M) n, u- {$ C- h
//j=0;
+ v: r5 G2 F# o* I* S
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) Y# q# _3 j- F( H% ?) c
{
6 P& k1 a* H, U
/* 测试UPP传输的同时操作普通DDR数据
$ T4 \; m/ _# ^! G' Y
temp
=i;
, x7 h2 | h/ w9 L- N, P
i++;
4 i+ k% I" G* c
if(i==1024)
( q! x N' N, x) p
{
1 U% I$ e0 ~ m) U' C
i=0;
# Q& D# n- N, _) {; P& p3 }
j++;
$ u( a& n5 U( h- R0 _# c# k; D) f
}
- e* Y9 o3 h( ]3 P7 m* L" U7 _
*/
1 ?5 B8 A; C, l' \2 X
; B' `$ X. T. e
asm(" nop");
0 d8 N. T" _# Q* m
0 `6 V( X" E0 f$ [
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ j, n* R4 {6 K
}
B% f9 [' v' H2 E3 o
: G9 c' _. m$ q2 y. l5 A
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ W% ~1 S; @' ]9 K
//UARTprintf( "i=%d\n",i);
H% F i5 K1 @% D
//UARTprintf( "j=%d\n",j);
3 a( a! i' n3 d
UARTPuts("Data mismatch in buffers.\n",-2);
5 e) @8 @3 W- b" ]' ]
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 v: M. s" C' D0 A+ I1 U% b7 e3 n
{
+ i4 {8 X* V9 r* ?! R' q" I
for (i = 0; i<upp_frame_size; i++)
1 X6 B& e2 z& d, `
{
F( \4 l* f* q5 n. R$ T
if (upp_buffer_a
!= upp_buffer_b
)
0 L6 w( |+ y) ?: ^! _# p1 N
{
; ~$ ?4 R# j+ [4 W1 S2 F: B3 K# N
upp_error_count++;
/ `, M% E3 n" e" c6 O
}
! S9 H( ~$ ^2 c% g# u0 `! @
}
, z( F( P( J4 d! U n7 A K
}
: H1 j# b8 Y- ^- F+ y
( I- w' e- W e4 p0 h
/* 报告通信结果*/
r; S0 b$ }0 n: w. H2 h* ?
if(upp_error_count != 0)
) O) b) H( D; \& h" `# Z* \
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) I# J9 o( _* w: S+ z2 o5 u
else
9 D. C! F! c/ `' c
UARTPuts("uPP transfers complete!\n",-2);
8 J: k) K0 |1 }# E" K
+ |7 v$ L& y% c6 B9 B
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 e1 U t' S( r! G8 e
UARTGets(ch,2);
8 w; n! A6 }5 k3 p6 h/ A# m
UARTPuts("\n", -2);
5 _2 {. P; S% m
& U. p! ]3 e l5 y
if(ch[0] == 'y')
; G" P' D0 I6 A1 ]- I
{
" Q3 C: Y4 d5 i, e
/*打印全部读到的数据*/
; c O+ p. u' K8 o& I
for(i=0; i<upp_frame_size; )
& Y) M5 v+ H, Y4 n5 I
{
' L2 E, @2 U! n% Q- k
for(j=0; j<5; j++)
3 B1 V9 g4 n0 x$ t; G- R
{
# u1 O6 v. i; s& `7 F H9 l
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. S4 \, s% z1 S5 u
i++;
2 K/ o; }0 ^6 G# c8 b. I
//if(i >= 4096)
2 J; _7 U7 k7 P4 O2 H
// break;
6 k7 S/ |9 G1 Q9 V& ?
: r; d6 i& S/ X1 ]1 L$ u
}
; h5 |# Y* X4 h& R+ |* ^) k/ s0 h
UARTPuts("\n",-2);
2 ~4 `; ^% |! d' |1 M5 d0 T
}
$ ]6 j6 X; b) v6 r- \( y3 p5 y
}
3 f7 q `/ n) p/ M
' O7 N% W4 |: ~9 ]/ O& F
}
, V( m9 l& w: e. o2 s& C6 D
' {4 D' z* j, n/ J
, t% \5 n6 l- A7 W2 o- I7 E, z
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* Z1 M/ @" g5 K& l
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' l# o: @2 b3 ?$ _7 L, J- z
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4