嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; Y4 ^9 D; c2 P
Void UPP_TASK(Void)
0 c- K+ Z( e2 [1 t! @
{
! P! m0 \7 g; k# t$ g$ }' F
/ i' F" _$ p0 ?" _
int i,j,k,target_int_count=2;
6 i! i4 e" a" [
char ch[2];
" q' [7 J' s7 j& ?. K+ X
* Z, H0 i! f: c1 X
H# M3 z# | P! {
. X0 \( h5 N6 Y+ e8 A
upp_interrupt_count = 0;
) z6 }" e7 I, P9 v& [- e, H8 L0 R) D" H
upp_error_count = 0;
8 W& D. D$ I: g) `
/ P1 D6 H+ t7 w7 K0 q+ c1 [
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 A2 [3 ~ _ r
// Initialize data buffers
6 ]8 n" l) [3 w g* i" {- Q2 p
for (i = 0; i < upp_frame_size; i++)
- m# }; r1 I# C) i
{
. W7 F4 o8 f9 V% K9 P9 u
upp_buffer_b
=i;
; m8 V% r7 ]" u; [5 D S6 ~
upp_buffer_a
= 0xDEAD;
) K: i. |2 W" F$ K, ~
}
L. ?5 z7 y8 c- ~7 O( C
0 H h& }6 n8 X
//for(i=0;i<1024;i++)
8 A0 [. o' i7 I0 w
// temp
=0;
" U) C: c$ H1 o! i
3 M- k( k1 I6 s) _( Y
//UPPReset();
! ^- D1 E: C4 x
/*启动UPP DMA传输*/
+ s) _+ w( {$ V2 n) P: ]
UARTPuts("upp_prog_dma_i\n",-2);
: i: J8 c7 f0 @1 ? \9 S R/ a
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 J4 {+ i1 w& |9 L
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! l6 Q0 p0 g4 l6 x+ R1 S
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% i3 d u" N0 _: @; M/ t9 C% U2 n1 O( C
8 P& _% v( H- ^- W
UARTPuts("upp_prog_dma_i\n",-2);
5 K8 ?4 {- L+ c( @) I
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& m! K7 N& R6 U7 G8 ^" {
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 F7 @2 K! [# i- B# @2 B$ g4 C
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 W8 O, |6 o( N
3 x& {( E1 t" X. r7 F0 z
/*等待UPP传输完毕*/
; ?0 T% L t0 g/ N# Y) y2 _
//i=0;
) W& e' C w# U& A' @& |. V/ m
//j=0;
2 [1 K7 r! o/ y3 @* o
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" }( c0 H& D. e* J2 T! z) \# j
{
' i6 f, j+ V0 e
/* 测试UPP传输的同时操作普通DDR数据
0 a3 r. {$ \3 a1 t8 e8 X( s
temp
=i;
4 @7 E4 v ?- b8 @: i+ ?% t2 ?' B
i++;
0 e, }* l, ^: {2 n9 [" s
if(i==1024)
4 ~5 t- j4 M7 B% m2 w
{
) H2 d8 ^# [, |# t) J
i=0;
# j3 N1 ~1 d& r1 g
j++;
8 V2 {& ?8 ~$ [
}
2 ], V9 G. f- x+ v+ c7 t8 s
*/
% { Y% L# j% h* G0 g/ c- D
# ~! O, l3 E5 K3 W% e" d8 J
asm(" nop");
& Q$ d5 d2 F1 _& f: N
2 q* Z5 ?& A) Y2 ~0 q% G
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 v/ }/ t8 Q4 s/ I [: M. N
}
4 ?0 k- z4 ^6 X/ R( G
g. T- K# d9 B! ?' O8 U( T
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% c& ^& ]7 E" E- z" I; w
//UARTprintf( "i=%d\n",i);
# R) \( _6 U# G# h; W
//UARTprintf( "j=%d\n",j);
! }* b- y) e) n& C
UARTPuts("Data mismatch in buffers.\n",-2);
$ p, J- J2 W5 W6 _
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 D0 d: m" l. d/ u: z
{
0 ^" s7 Z7 |8 [
for (i = 0; i<upp_frame_size; i++)
) _" Y/ u* `/ Q/ x# j" i& B" r: N; \
{
3 B0 l" H2 S" U) s" U0 ?; w
if (upp_buffer_a
!= upp_buffer_b
)
+ G% S* G4 k4 e7 e$ Q+ s
{
# F- {+ _& k {. I* ]
upp_error_count++;
& z9 \$ i8 m9 Z2 B/ N; Z
}
5 ~* C8 u' `6 `' u. i- U
}
( o9 C+ j9 e+ N+ g: b/ s1 k) u
}
4 y5 C; {. S2 f0 J( m# M5 R
" s, L5 ~. O3 v( X
/* 报告通信结果*/
" s6 `. ? _2 H
if(upp_error_count != 0)
+ J$ E/ g' u* A+ l
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) T& L) L% b2 X4 K# O3 i4 A' A* O
else
/ i% }2 N7 G8 m/ q. _3 e* Y
UARTPuts("uPP transfers complete!\n",-2);
) L% a Z: |9 X- H/ b0 H
4 t. x5 [4 O0 v; Z: a& i. @8 l4 L
UARTPuts("Do you want to print all the data?(y/n) ",-2);
9 j9 I# F2 ~* Y% z3 j9 w3 B3 g8 d
UARTGets(ch,2);
. r9 Z* r) d. W( m$ J( E6 [
UARTPuts("\n", -2);
/ z; a- U0 J& e( d$ ^" P$ R6 x
" D; _- A0 g7 m% A' o E
if(ch[0] == 'y')
" i2 g+ r/ A& _- V: G3 F
{
0 E. |& U# i& ?/ ]0 O* V4 c
/*打印全部读到的数据*/
) b& c) A' F! w! z- K' n' r
for(i=0; i<upp_frame_size; )
- j# i5 r$ b7 R
{
7 J$ ?( n" }, D1 J" g
for(j=0; j<5; j++)
0 g8 r* v: N' a$ J: z/ T' @
{
. y: H$ H! K- ^ Z; m, s" K! {
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' ]" J) n( s' @# J! @7 X6 d
i++;
3 a. N6 [! s. y+ f5 P R
//if(i >= 4096)
/ b% C. P! c3 t" z
// break;
, s9 p1 s: U. J& x4 n
, Q8 V+ f! H$ v) }; _( n
}
) P' O- c3 `, F
UARTPuts("\n",-2);
d' B( D$ a/ n
}
& s1 e$ M8 Y! `0 P3 t7 D! }
}
/ p+ E% z) L# R) J" ]
! Q' ]5 `% N- X- C8 A+ V' m5 Q' c, v
}
$ z- N, I1 B) ]# R- d+ f
+ |8 H# @/ z U3 ]1 K
* A- m+ j2 j, `+ T' G
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% l# Q" U2 g4 U4 Y1 e
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 `. l( r* a0 A* P: K% ~4 p5 d0 n+ J
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4