嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* L n4 E; E# z" `% _* |
Void UPP_TASK(Void)
" U u! `& d) n0 E0 U9 Y( c
{
/ V( O. x4 |* o5 A- K. Q! t, v
& ^. e# |' O& t( v6 O D& E
int i,j,k,target_int_count=2;
+ p! b1 F' g+ a% [
char ch[2];
! t$ P' k7 [7 |- r' e1 L
/ F/ s- t6 V# N; a" u8 R
3 M0 F8 B# s8 g! B+ O
* |2 ^" m2 V. ` k% X# {1 ~
upp_interrupt_count = 0;
5 k7 N. q9 O) c) T+ S1 u% _
upp_error_count = 0;
1 x, B& R3 z; {3 W
9 w; d4 B) T/ X; M4 Q/ D: }
UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 u8 n1 q! }0 g# N* ^; O$ j1 G
// Initialize data buffers
. f. B+ h( @9 e$ a8 f
for (i = 0; i < upp_frame_size; i++)
5 k l; O7 B% z# o) p! Y+ H+ u g
{
" j! I+ y/ y2 D% o
upp_buffer_b
=i;
5 t0 V! J0 a: |! t. E
upp_buffer_a
= 0xDEAD;
& t& z1 H3 C7 }, D- I7 ^6 E# a, f
}
0 [; c* X* W* t( Y; S0 F/ E; ]
# K0 M, }3 S* ~
//for(i=0;i<1024;i++)
$ Y! z' B) _: }: l, g. m0 G0 `
// temp
=0;
* s( U: Y- U) i$ K" j
$ R/ D8 `- `; t8 @4 v5 }
//UPPReset();
' [* A+ P1 V, l K
/*启动UPP DMA传输*/
8 h1 z7 H4 ]5 h
UARTPuts("upp_prog_dma_i\n",-2);
% Q. r0 [ w# B" r; n
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 A% @- W' K; [
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' X: `% |6 b1 b2 Y# n W
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ c5 y$ n. V+ p
5 G! s! A. S4 Q" M" u/ ` j& {; }
UARTPuts("upp_prog_dma_i\n",-2);
" p: r; F8 u! O* Y8 O& o, e
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 W/ ?/ l' X4 z: x7 B
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" G) n4 e' e* P) t! S
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 ?6 P1 \, a" R
* {, Z$ c; T/ X( c& |0 [
/*等待UPP传输完毕*/
0 e1 f# H, J$ z0 A% K& w
//i=0;
1 f8 _6 a' l+ \1 x5 T. t& z
//j=0;
' r9 W3 g8 q& S; G$ j2 h4 L
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" I, b) ~- d2 r h( {
{
( p2 p$ H& P: ^( w
/* 测试UPP传输的同时操作普通DDR数据
; ?# T$ A: u9 t w# [/ d3 _
temp
=i;
' ~- |0 p( W8 ~5 Q4 D- P( z" z6 [
i++;
) H( L" i9 G: X! N6 n8 L
if(i==1024)
( N8 n, C$ @5 W% s5 L
{
( @' b. P+ o! {
i=0;
) I% I3 @! l8 i/ ~
j++;
0 a3 B+ m) B6 h- v
}
& m7 N3 d$ J3 N: p
*/
, g, L) ] k: D4 N
i$ F8 ]5 k! e- T
asm(" nop");
/ x1 _% q1 ~! |! i
$ n' \' L% p* b% a8 p
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
4 S" q0 {, r" i3 j; @
}
- _( L. r/ p8 [* t9 i
7 W s2 ^, b& d) ~8 V. l
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 x( x0 l0 r3 b. b
//UARTprintf( "i=%d\n",i);
6 C) y/ p& S/ @/ b/ R: X
//UARTprintf( "j=%d\n",j);
8 K4 T& E6 h( d3 z5 V
UARTPuts("Data mismatch in buffers.\n",-2);
4 i5 ?/ X' ~1 c- Z# k; W n
if (upp_interrupt_count == 2 && upp_error_count == 0)
3 C D0 ?% b* N' ~
{
6 U9 F, m3 b% h+ w1 O6 M
for (i = 0; i<upp_frame_size; i++)
, a, B8 G+ J) ]7 h. _' ~+ {
{
( o f5 D' z' S' Z0 e# H# v
if (upp_buffer_a
!= upp_buffer_b
)
, K3 H$ q. }" O. t6 t/ v9 _! q
{
9 k4 R% T7 \# m' B* j% e
upp_error_count++;
% _) Y4 b; P$ @6 \1 c3 V
}
9 l2 H8 L+ n+ }# C% d
}
5 `/ h, t+ I& [- ]' N9 a! D0 ?( _
}
4 M. K6 o& I) w+ U3 z! t% O
' m1 J6 w$ }. \6 i( u7 s. a j
/* 报告通信结果*/
5 f* l0 \9 A0 f5 l0 P- w+ ?; G
if(upp_error_count != 0)
: D- x" m5 O5 |+ }/ k; k
UARTprintf( "upp_error_count=%d\n",upp_error_count);
! d( ^% S4 Z5 u: K
else
! j9 a$ w, _$ g; C1 B
UARTPuts("uPP transfers complete!\n",-2);
9 x9 A0 q& A, T' L- J
# w; ` C6 _7 M( o Q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
K( ^/ y& a7 f: `" p2 ^
UARTGets(ch,2);
_2 f8 j3 ?2 a$ `1 D
UARTPuts("\n", -2);
3 m- P: e" Y; R: h( P" R7 G% _4 r
" R$ {& |3 s K' u
if(ch[0] == 'y')
' x. {' Y# L9 M1 ]
{
1 D8 s- K* U3 l7 Z( d }3 y
/*打印全部读到的数据*/
( |( C* d% `! b; B% N6 p
for(i=0; i<upp_frame_size; )
' ~; _5 l3 z) S
{
7 ~& U! `, v% {8 H, s# V3 d) P+ h" S
for(j=0; j<5; j++)
' o! K" r; z/ ^) ^ |
{
/ J( y( q3 Q2 ]) @
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, G: c0 Q- a0 P5 g) `
i++;
" G) w0 A' S1 A0 s
//if(i >= 4096)
+ {5 ^: P2 g$ Z% K+ \$ b! a3 |: i
// break;
# n8 O9 w- ^& O3 m4 T2 i. [
) C2 x0 S7 Q3 g& K. b
}
$ a4 D& d; m/ a( Y w# b
UARTPuts("\n",-2);
3 J, `. Z2 J3 ~, f7 l
}
" x. V3 b0 d/ @0 v/ C2 ^
}
) F6 M& I ]* V( z. ~* p& M
; [& R. p) k5 m; J
}
- Q) Z4 M. Q! Q
& H, W1 d( P4 Y/ F, h7 W6 U1 o
' o) O7 \0 q9 ~" \" H
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' W( b" ]1 F' v/ O4 q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 O+ |9 q& B+ U; N
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4