嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 r" O: X* C6 X+ b- O, Y; t
Void UPP_TASK(Void)
* x" a8 C" C; v0 C+ v
{
3 ]! V! R+ H+ q7 W7 D' {
& J7 ~4 H, ]+ V2 e ?' |
int i,j,k,target_int_count=2;
V' K0 J5 m! F* ]
char ch[2];
" C; J7 E# Q* u+ h9 j' T/ b
4 `' o4 M' J8 W, N' ?
* t. u/ N* Z: ~ E$ O6 V: x
1 I3 K+ ^4 `* |/ s1 X7 d" M% Q
upp_interrupt_count = 0;
& x7 y5 x$ S1 l1 p
upp_error_count = 0;
; t. X5 f* N0 Y" }5 _; W* d4 ^% p% ~
1 I' |/ ^1 Z/ W5 H
UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 K4 u% w+ S* s
// Initialize data buffers
( M/ U9 ^# G' R4 _
for (i = 0; i < upp_frame_size; i++)
6 Y' {$ U6 }' O8 _) F9 m' v
{
- q: _8 P& _; I, |) h
upp_buffer_b
=i;
; g, f3 Y4 _8 ]+ X
upp_buffer_a
= 0xDEAD;
% E/ z8 T1 L3 X8 K0 U3 \* ~
}
~1 E: i* |( K y% S! A
9 i* p3 l; v& A/ J+ `$ ^3 y5 |* z
//for(i=0;i<1024;i++)
5 E. x: S# u7 ]- l: @
// temp
=0;
4 J' ]; M1 P( L0 q# j. N1 R( c" [
' _9 K8 P6 f7 \' O5 Q6 z
//UPPReset();
" O. e3 [! U- G5 H9 t6 a, s7 v& ~
/*启动UPP DMA传输*/
. ~* Q5 z; B% \
UARTPuts("upp_prog_dma_i\n",-2);
; _! h# F( Q* e9 T T+ B
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: k3 C8 T' t* t* C
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: x; D% F0 X3 L) _" p' _6 r
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: D+ B' p: ^2 B( b' _
$ D- F. I( w& ^9 A. V1 T
UARTPuts("upp_prog_dma_i\n",-2);
$ N7 H; [/ Q: s& h P ^: p1 b
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( m: e. r j7 ^* I+ m
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ [+ N0 P) e* k: z: e" @* r
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) U1 ? p* K I) S
; W }0 s, ?6 m1 F) n
/*等待UPP传输完毕*/
* _* @; i3 c1 j1 o" A3 q$ l' E0 D( [( g
//i=0;
: n2 p4 Z2 n. d% r4 c
//j=0;
& p# m6 h7 J6 \. p& x9 X" R
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, y5 u% {% N- g0 ` p5 J
{
1 \- f! z, |' G& Q5 o; r& t
/* 测试UPP传输的同时操作普通DDR数据
/ f8 q! ]$ f9 {% Z
temp
=i;
_+ F9 a" u! i T
i++;
: s, p! T, [% k
if(i==1024)
4 G1 }9 V$ V$ l/ m
{
# q$ Z. _5 s3 r/ S/ g T
i=0;
* _: f4 g8 m) i9 L( `( s' s
j++;
: S) Q+ N+ w# x Q
}
" l H. Y* o% d- c8 j
*/
! c/ C2 c6 N& w/ U5 d" g6 g
8 K6 h6 y' K' D. N: c+ K
asm(" nop");
" U8 E8 S( F+ }! P1 X$ H
' j* b+ e& t9 x4 C9 H: R' w& t h w5 r
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ ~, d/ S; e! ~: y( O2 n
}
+ D9 k) X" m: O" h& i1 g
- A' i' J/ y& X' ]0 d) c
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 p, A# ?2 W8 l+ l" L
//UARTprintf( "i=%d\n",i);
% N6 s0 j- \ J, m; W
//UARTprintf( "j=%d\n",j);
1 |+ M; ?) P- p# G1 K) P
UARTPuts("Data mismatch in buffers.\n",-2);
) r+ ?+ W: n2 {( Z
if (upp_interrupt_count == 2 && upp_error_count == 0)
. l( k4 T7 G9 w R0 P k
{
* B9 f B& f. ^* I8 W) ~& b* z7 r9 T
for (i = 0; i<upp_frame_size; i++)
& E/ H7 h6 z3 b7 C8 K) M$ S3 Q. a) E
{
# m, ~( M5 s0 b K
if (upp_buffer_a
!= upp_buffer_b
)
# P9 t% t5 d3 z3 y% r
{
. h! c. T8 U1 p; B/ ]
upp_error_count++;
1 U2 d6 s; R+ {1 b" p6 B5 g6 O; X6 P
}
- d g8 ^. K0 I! U( I- [( w& K+ q
}
* ?4 K3 b# M$ S/ M& Z, J
}
4 A& {3 v$ v, [. x
: D& M" h$ S8 |0 \+ C" G; e4 e
/* 报告通信结果*/
( e% E4 `/ O! C; @* A; V7 z5 m
if(upp_error_count != 0)
7 o! S) M' M1 i' b! b3 l
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 B+ G- o& k6 J! }
else
$ [8 E1 [7 y5 A3 @
UARTPuts("uPP transfers complete!\n",-2);
5 ~: J" c; `9 H
& c+ t0 R& ^! u; i% _/ o! n
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 `5 H' _$ F0 |5 B
UARTGets(ch,2);
6 W8 Q& }' U3 @
UARTPuts("\n", -2);
' g7 T) @8 `7 f# V2 ~
; h6 y9 d/ i1 C! S! D
if(ch[0] == 'y')
5 X) s/ Q8 @+ G" t8 Q" e% v& ~
{
" ~' v" r+ M9 R2 R
/*打印全部读到的数据*/
* k' k/ w9 s) [1 m
for(i=0; i<upp_frame_size; )
4 E2 P9 R2 e. P$ m l% ?- A
{
& a l, X: f8 D; |
for(j=0; j<5; j++)
0 F; V0 [/ I' F; F/ t8 u, n
{
+ w+ r* P' |4 x1 x; l
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ k. Y6 o) P9 A/ j% R9 T8 ^
i++;
7 l0 ^9 ?4 [3 ]' e
//if(i >= 4096)
9 a6 ^) M* g& M* p
// break;
/ m. ?* [% P+ G
$ J$ ` x' T! x* p/ z- L3 f0 Y
}
, d# K. B$ \ t, d0 h! T
UARTPuts("\n",-2);
' w0 \* c J8 I- a3 ]# P6 ?
}
- A; o& V; V- j: b( S* I$ r" n
}
+ m+ {5 X# Q6 g& n# K' {% S7 r
% X1 I9 f% K$ z- A0 i# B
}
5 q' [: d5 s% s" e7 e1 ^: N
# ?( R1 r5 ?5 |* S; W, {) B
$ w( K3 V/ x, t
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# r d% g8 B6 g7 Q3 l
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( H. z9 y, I* N
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4