嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' r% w) [9 m& A- c) E# ^3 ~
Void UPP_TASK(Void)
+ t* f" A* V. O' }& r0 W
{
2 N' c' K$ R. E$ s
3 F. z- _1 N7 D2 {0 A, ]. q0 c
int i,j,k,target_int_count=2;
4 d' }# p, n( p9 {3 u& s0 q3 Y% y0 d
char ch[2];
- ^3 N3 ?- |% v; W
3 N% b; d; W( N7 y0 }' v( i) z
5 v* L6 C* H7 m) e
/ [6 W o# g& Q# ^: M
upp_interrupt_count = 0;
+ s4 ?& S3 V. ~" K
upp_error_count = 0;
, h; W% M c* e9 @5 U
: d. P) w1 D- E; [' S4 u4 V* s) Z
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# t$ f7 y8 C6 Z. G7 u4 ] m; y i+ B2 U
// Initialize data buffers
$ J. y: ~% e: |( c
for (i = 0; i < upp_frame_size; i++)
! `; X# U9 r( n- P6 j
{
) B$ G9 C2 t) A9 d# I6 T& B0 k! j
upp_buffer_b
=i;
2 l- K* `" ]" o# C# o* Z M3 r: u
upp_buffer_a
= 0xDEAD;
: O3 f) s2 E7 }! }* g( f. x3 g
}
& j, ~5 h; U3 Q3 K
" w/ L) d; _: V0 p7 L6 C- _
//for(i=0;i<1024;i++)
7 Q: O _" s+ \$ a7 _- P
// temp
=0;
. s# q: D4 ]6 z4 t
. w0 R# D3 r, z( ^3 f9 R
//UPPReset();
: w1 U( m9 A' u
/*启动UPP DMA传输*/
! t" `& `* U1 x! ?! r
UARTPuts("upp_prog_dma_i\n",-2);
9 Y' E _$ a, `4 E) Y: c
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
P) G7 u8 z0 q4 @. {, w
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! O4 h# e2 N6 n2 A3 J( V- a7 s
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* {$ G) ^; r+ I3 A: h
+ e9 Z Q; ~; ? w
UARTPuts("upp_prog_dma_i\n",-2);
. e$ Z6 h& G1 N1 Q u- t
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% Z1 }& M$ R8 c; `9 m+ ~
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! V& p) \( [! t3 t. N+ T
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' }. G n+ O# n9 D; }3 Y
{! l$ I1 ^4 R7 C! u$ k
/*等待UPP传输完毕*/
?2 B4 |8 N/ G" E) I+ a- Q
//i=0;
* p8 y( Z1 I) ~% g1 q& t3 O' f' [# K
//j=0;
# g$ O( v( f% d+ c+ d6 G
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' h6 _. I3 }. H0 j
{
' z% W# i& Q4 f9 R
/* 测试UPP传输的同时操作普通DDR数据
4 U. v! e2 V( `
temp
=i;
. E# O) c' L, ^5 w$ c+ X+ C
i++;
7 |! Z: @: k* z3 Z; n4 p
if(i==1024)
3 _5 h& |/ a' b9 O% k& p2 i
{
( e# Y# U3 ^, ]+ ^5 D& X6 h- N6 X1 J
i=0;
6 B1 X/ N% c2 \
j++;
/ U4 u2 s6 U9 P/ f. n, P$ m" u
}
% S1 O: I. |* w& Q
*/
0 Z$ c4 x- a7 B
. F4 N( |4 I* n& j; a8 J/ I I' V% M
asm(" nop");
& J, g& ~+ N- R5 ]' n! B/ T
7 ~( i/ j1 [. x3 s, j
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" e4 e& @' Z) m
}
0 B! w& S% Z2 e! c: F# r' ~" n
. Y6 p2 h* x% k
/*检查UPP传输的数据是否正确 (loopback modes only)*/
: }2 v( e- _/ \8 `3 K
//UARTprintf( "i=%d\n",i);
6 x! Y9 Y9 t2 i
//UARTprintf( "j=%d\n",j);
* ^$ y: O! i& [: z/ X# Q
UARTPuts("Data mismatch in buffers.\n",-2);
( f/ o% a8 m1 @; R3 B
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 o2 h X+ ]9 J# q
{
( z; |/ Q U/ [* q& I
for (i = 0; i<upp_frame_size; i++)
) c2 ?- C8 ]7 g4 i3 O
{
' h1 x- r! k N& V* `
if (upp_buffer_a
!= upp_buffer_b
)
4 ?, a- Q" W9 ]7 \, C
{
4 e* ^1 R$ n2 Z
upp_error_count++;
# F3 N) \% e0 s8 \% ~) m7 I( K
}
t; T6 {) U0 h6 A: \% Z
}
; b; P8 S( S' ~! N' V# w3 v, @7 t; g
}
# z) \/ U6 x6 V3 A
6 Y6 [. p3 ]% V2 a' ?& f/ ]
/* 报告通信结果*/
2 u" e! _$ n( z
if(upp_error_count != 0)
: z7 L, D p8 H% d; D
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* p! x4 P1 |6 b7 e
else
e; x5 ]& _; ]4 g, |1 m* y
UARTPuts("uPP transfers complete!\n",-2);
+ ] n& y& y( \/ K9 r+ o- O
+ \( v/ p. c; U x
UARTPuts("Do you want to print all the data?(y/n) ",-2);
. v8 T# T6 y. p$ }3 k' M* q1 d
UARTGets(ch,2);
3 i9 y# p0 q5 L! m6 h+ J7 G
UARTPuts("\n", -2);
) N2 U; s3 Q1 o4 n
Q; M+ `. C* Y
if(ch[0] == 'y')
2 c! m$ P5 g1 P2 M; y8 c0 r
{
0 e7 p+ b. |& s/ @/ l. C
/*打印全部读到的数据*/
$ E! D, v% f$ _+ g" {4 v
for(i=0; i<upp_frame_size; )
( A o! `; R2 O+ M
{
6 o2 I4 Y" P' y) c) l! k
for(j=0; j<5; j++)
+ S1 [; t! C6 B! ^7 F: p. T% o" i2 N
{
6 V; G9 X; } O4 z
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 i6 U3 h1 A4 E- {
i++;
/ P- B% d6 o! i9 @- E! E
//if(i >= 4096)
& J; [0 V. ^. m. V2 z5 ]7 U- H
// break;
; u( G, [; R$ S
, p! d( W8 |% h2 ? p
}
- q& ]7 D! Q; M/ Q2 Z
UARTPuts("\n",-2);
9 n! u; J' {2 }
}
5 w6 M. F5 N8 z
}
2 w7 J3 y e4 H4 S4 K8 ]
/ O8 `: H- o L3 z
}
5 O; _8 }+ W5 H( f' l
& b* S; B) z. I
4 x% I3 @# r) d6 l' ]$ u% |) B) r
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 N! \) B1 j l. y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
N5 w3 u; x5 V& ?4 h. b
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4