嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! e! A H0 K- [" a2 g
Void UPP_TASK(Void)
4 O- O9 P5 f G
{
0 b" C2 |2 H) ^3 G4 `; `4 B
: o- t4 d- P0 Q4 ^. K) B
int i,j,k,target_int_count=2;
. \$ Z6 b$ \7 A6 h( N
char ch[2];
2 [% [* ? @6 d: ]5 r
7 m1 x8 J% J; B' z: o: f$ {5 h2 Q
& ]5 ^, L6 L4 ?' K, S. @9 E. \3 `
( [4 J! r0 t, Q8 K1 K+ Y+ X8 k" w
upp_interrupt_count = 0;
# ~' d4 d4 f U' w6 S
upp_error_count = 0;
0 D9 c3 ?" Q7 z n3 [
7 g- V' j, ^7 ?1 u' C
UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ K$ W; Y( U9 h8 w
// Initialize data buffers
) M1 A. a# h. I9 @+ o* E
for (i = 0; i < upp_frame_size; i++)
% G$ M( R+ y" n$ v" L
{
/ H! S' D5 `1 T7 }8 }. h
upp_buffer_b
=i;
' x T0 r1 j* a
upp_buffer_a
= 0xDEAD;
4 K% p7 _$ Q; w* O* ]' t) `' ^
}
8 ?. |& y, G+ e
5 J2 Q& ] K- m! c0 B, t
//for(i=0;i<1024;i++)
/ C) e# z1 \- W" s/ E7 j/ @+ [) z
// temp
=0;
9 l4 W7 }: e9 o/ E. y
( V; s( g' O: M* s
//UPPReset();
8 `1 F9 a& H& P G) a. |6 J
/*启动UPP DMA传输*/
2 h. d) f+ S% l# v3 Y
UARTPuts("upp_prog_dma_i\n",-2);
' d$ R, U# W8 | c9 I
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ _& z$ w4 V$ V2 g* u
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 m2 F: \% e$ ]7 f3 r+ b
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. D' }* ~2 q: K* r* X' y
4 N. R5 Q* n7 o" Q
UARTPuts("upp_prog_dma_i\n",-2);
$ v% S) m. ^) K7 I$ z; D
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
C: h8 N$ y: S5 p1 Y* }, P
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 n, n& }' `1 V. \: n3 N
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* _- y) m! g& Q( F& V2 [6 C8 N7 K/ w
O. i- d4 G# z% s9 i. p$ S
/*等待UPP传输完毕*/
h# Q4 }: t: K. h4 S
//i=0;
! V6 r. H, Z0 ]: p+ o4 {
//j=0;
% |; R. K! f+ h+ _) _
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 d. o5 y+ [: ?" X% t9 K% H) W5 F: K
{
, Z( ?" y; ^( K6 L1 e: w) s3 v
/* 测试UPP传输的同时操作普通DDR数据
% m- |2 i4 y* ~8 P1 e
temp
=i;
/ Q; }) S" V4 P" [
i++;
5 r5 u5 u1 c! o, e4 R
if(i==1024)
: ~( x. K: Z. P! x4 }3 D/ E7 }8 t; @
{
4 S6 m$ e" g5 r* M( x/ j) @) f
i=0;
* C( E8 c. b2 o5 ?5 j
j++;
4 X0 u4 r+ {" v, Z
}
' P7 t7 P8 x, [, i* P, e1 v: D
*/
. q0 J8 P: O3 S1 x# a
3 @1 f* _/ s" P4 e
asm(" nop");
. T: O' a! `4 I5 D
; X. y! \( H/ v1 M, @
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 G4 k( X( J& ]+ H8 U% b' Z4 r6 h
}
: _ h% @; @( q( p6 x0 m! x
& |- S7 b. X# j0 b! z- B" t
/*检查UPP传输的数据是否正确 (loopback modes only)*/
6 s# N1 _/ |; W7 G$ j9 r
//UARTprintf( "i=%d\n",i);
3 f# l. I7 u% [
//UARTprintf( "j=%d\n",j);
; n/ Y- a7 h% e7 l6 u! i% U
UARTPuts("Data mismatch in buffers.\n",-2);
3 a$ B% x0 m+ l4 m c0 L
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 m" a) r6 k" D" e' s" {
{
$ n; z" c8 c2 j& @& Z$ q
for (i = 0; i<upp_frame_size; i++)
# A1 C$ y2 X! r% h# {) a
{
" X/ |% P! m# x7 E1 W# x S
if (upp_buffer_a
!= upp_buffer_b
)
4 ]7 b/ `; i5 M+ ?) c/ X
{
) U. l% y6 k2 t6 d2 T
upp_error_count++;
( A" h( S8 e3 C) s: B) z- i
}
3 g) _: l* d7 K4 w
}
8 s w% c* K* s2 p! y4 N
}
$ @, W/ N) {0 N7 Q2 [
* |, n7 Q/ {$ q7 D( G# K
/* 报告通信结果*/
/ `% _; R, }+ Q* N* c
if(upp_error_count != 0)
7 Z7 O8 A4 B' G
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 {8 \1 r' g& c: h6 r
else
" I3 ^. k2 x2 ]% g
UARTPuts("uPP transfers complete!\n",-2);
* m' M$ _0 f& i& @" D( F! O
; t& ^+ r6 ^5 p6 a2 v
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* G, r! O; D9 Z. [( ]5 a2 b
UARTGets(ch,2);
6 _; }: |$ O" ^0 }
UARTPuts("\n", -2);
) Z3 |7 B* F) o$ v5 \5 c/ T* x( B
, Y0 i7 g* z) \7 [
if(ch[0] == 'y')
5 r. a2 c* R' s
{
& v4 T8 b2 H4 `
/*打印全部读到的数据*/
) ?8 d, b& U+ E/ T+ E
for(i=0; i<upp_frame_size; )
7 H4 j) B2 X* T* X1 q
{
' Q% S( L& C! b6 K
for(j=0; j<5; j++)
: u0 q- Z9 U! \- ~0 i5 W1 Z1 Z. O* o
{
5 j4 w9 o8 N% r5 l* m" F
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
0 L$ r2 V0 [- r! L( \# ^
i++;
1 E: d( F2 K" D4 z) x c
//if(i >= 4096)
0 t5 v/ g" N/ B- ^7 y! M
// break;
2 X( M# V- H9 X, o$ `' k& Y
( n! B1 l2 Y4 c# z# R0 F
}
- g. S& R" g( j$ N+ U2 c, E
UARTPuts("\n",-2);
8 V- x* J6 D" U s( t
}
9 v! y( Q' k7 o0 A
}
5 W( k, R9 a2 \# B% l
1 x5 M7 x, X" {9 [5 M
}
: H) \" x! t" s3 P. z5 B: B
! {7 V6 g c( P* \) S
4 E6 l: N( |9 V( m( o5 G) a) ~
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! @2 @. w5 `# y: X. I8 D/ v% M
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 q# E8 K4 D2 ~! x, y4 V
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4