嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 ]+ J4 p( F+ S/ v) D! O' z
Void UPP_TASK(Void)
w) r7 I" H8 \
{
9 ~- e* T$ H' V3 L8 L3 v- r) B5 {% c
/ @0 j+ }' y& A1 s, ^* ~
int i,j,k,target_int_count=2;
/ R* l) R& c% b" f# v7 e6 j* g
char ch[2];
1 Z1 J( K" V* a" j( }4 R( c8 {9 d
% Y$ t) {2 Q" T2 Y% F5 z& [3 g
; j' k- b6 M. I' R: d+ R5 X
* A! X U' v: N, U e
upp_interrupt_count = 0;
, j' [* i+ @/ F2 [$ M4 u# Z& I; W7 `
upp_error_count = 0;
/ e4 y( B% P, b* F# s) U& G m
% q0 m7 s3 }' a
UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 H" `7 r# F0 D1 l
// Initialize data buffers
% @8 |/ p7 J, i/ T8 k% x# l$ i8 m
for (i = 0; i < upp_frame_size; i++)
5 e8 e: |1 ] e- Q
{
8 d! g( m, z0 U. ~4 [( [# ^) x
upp_buffer_b
=i;
0 c% p- f3 T- ` h: L i
upp_buffer_a
= 0xDEAD;
. m# e$ b' r: K3 B9 }
}
( q* I% W3 g, q
* u& u8 L1 C# m
//for(i=0;i<1024;i++)
/ ?; X- ~7 G2 ?4 k
// temp
=0;
3 }- \0 n4 L! l# m2 {' R
3 ^! s) e: @/ N& g7 g8 W) A9 r9 B
//UPPReset();
2 T8 A. @" B0 _8 M
/*启动UPP DMA传输*/
# J% B+ r, r# u' r
UARTPuts("upp_prog_dma_i\n",-2);
( ^2 o& i) w4 m6 w3 K6 L/ F
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 P4 t3 ~3 v! R7 H3 L* @
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, R8 E5 q' |5 ?) |
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# o3 F" o( e: \
' G3 d4 Y) M8 Y- l7 s0 o
UARTPuts("upp_prog_dma_i\n",-2);
' [% l% u! n, D) l
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ k* }. F3 Z5 H# q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ L6 X; e+ t9 h& W1 i5 G- M9 ?' V
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 F. I1 {* Q S7 o3 g. Y$ n2 P1 y
! j6 S$ `2 D0 `
/*等待UPP传输完毕*/
5 l* ~# V8 w6 I
//i=0;
2 T+ ]6 b! ]: M- Y8 Y2 F/ d
//j=0;
* F3 E1 \% G; v, e
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. s1 J& a; W; v9 |+ I, H: H
{
' a) T" g1 I) w" N& r$ q6 s
/* 测试UPP传输的同时操作普通DDR数据
5 x; w7 B N7 j
temp
=i;
s; H% F! ?# R: \& R- {) Y$ l
i++;
; w( K4 d; _% `6 V3 {3 i
if(i==1024)
7 D+ S; r t4 x: d( q
{
5 T: B* `/ B5 ^. A
i=0;
" }. {, v4 B' H4 q& c3 h9 n6 h
j++;
s6 v' z+ H/ z9 w$ j
}
% ^; m' v, K5 `* F5 V
*/
) x9 l7 S# y* f
$ O4 U6 O4 F8 S7 J
asm(" nop");
% ]0 \% Y7 M P* _& t
" P+ |+ J: e' R# O
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 z$ o( Z: l& t j( `
}
7 N5 G: A1 L, @& _; A
0 e# C+ C ^% v J4 A
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' R, k7 z* e- W# c
//UARTprintf( "i=%d\n",i);
* p3 q3 Y( e4 U, R$ b
//UARTprintf( "j=%d\n",j);
; `* I8 q" F8 P" d
UARTPuts("Data mismatch in buffers.\n",-2);
( y' a8 N% m, R H
if (upp_interrupt_count == 2 && upp_error_count == 0)
" X- s( ]5 Y: \2 ^
{
: E7 N/ O; q" }
for (i = 0; i<upp_frame_size; i++)
; |9 u ^. [0 d7 H9 ?
{
7 N E4 L) T1 K I( s+ r* |- S, v, M
if (upp_buffer_a
!= upp_buffer_b
)
7 i$ z+ V. b9 K: a0 }3 f
{
0 Y2 d! v* }: \; S& V* A' L
upp_error_count++;
2 C/ E- }; W/ I- C
}
) E# h5 A$ a/ p
}
) y; D- I! b! K6 `4 v, s( ^
}
; ^7 R6 b8 m: a6 v- r6 e
' |: \# E* W7 L% b- N3 \
/* 报告通信结果*/
! i1 i! D) B ^2 _) A Z/ U
if(upp_error_count != 0)
& B1 {) Y; e1 s; v- e
UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ S$ p' _3 N. k; l/ w; @0 ]$ Y
else
7 l6 M" [+ a6 v
UARTPuts("uPP transfers complete!\n",-2);
1 r( m! }. c" D7 W
! M9 i9 N' L: D
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) r2 |: T; x: K" R" p1 B
UARTGets(ch,2);
% x. b) J7 l- a
UARTPuts("\n", -2);
: y: j; }9 W. W4 {- p8 z/ J- R
9 D8 N$ W# ~. R6 v8 K# h
if(ch[0] == 'y')
- w' u/ M- E, e7 z N( m$ O
{
. S6 K& h( w8 ~5 D5 T6 l9 u# R2 H
/*打印全部读到的数据*/
3 l, u+ S1 D' S$ g
for(i=0; i<upp_frame_size; )
: \0 s+ M3 f& L' j( ?
{
6 G. c. w. _, F: Q/ b: i
for(j=0; j<5; j++)
- B! Z* l! |1 S" G* ~% Y$ P
{
2 K \9 Z, e+ P" N) F I! `2 _
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' Y* d& h8 Q5 H# g( c D* D0 ?
i++;
9 n( R7 G2 x; b/ O9 }4 g
//if(i >= 4096)
$ G" X& `( a4 P' |1 m/ r. R6 l8 n
// break;
X* Q' N8 s8 H- m* P, h+ H! M# r
5 D3 O7 Z7 g8 K
}
+ l2 P1 A8 Y( ~2 ?
UARTPuts("\n",-2);
% `; h9 ^: t% @! }3 r6 q5 H
}
, Y" ?" }4 S1 t1 R* g( G( h
}
9 D) n3 n- D5 H& D9 x
& j1 l! T& q/ Z! B, M s, Q
}
+ x9 j T- O* @
8 N$ \9 k& h2 P. ]: D8 b
3 g- U8 K0 N! P( i% Z! v4 o
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. z% O) G. H5 Z5 H* N
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- M) Z3 S" V; B2 m, h
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4