嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 B, m( S9 Y1 [0 d5 { U+ w
Void UPP_TASK(Void)
6 o9 h$ q l+ p P
{
9 ^: M% Z! W5 C0 C; V0 ]
$ E0 y/ h% R) \" w& r: Q8 w
int i,j,k,target_int_count=2;
7 c1 e/ T3 }# ?5 V) ^6 d
char ch[2];
) Z% f, k# G% c3 _& P/ Q" _: H( W. n( s
6 z, {0 Q& D) M0 W8 l4 ~+ q
1 ~2 _" n* ?# F( o
% K8 j6 X2 W. X- s, B1 l
upp_interrupt_count = 0;
& t- f, ]) y9 n9 v1 R
upp_error_count = 0;
. m+ u8 v7 ? U; C( `3 c; }0 R
/ Q) w, F, U+ r1 ^1 [
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% A: { [' p% B8 L% W; @/ J
// Initialize data buffers
1 F) G8 g! Q+ M6 p7 K
for (i = 0; i < upp_frame_size; i++)
% u+ i3 F8 b+ ?
{
" d: q% Z$ G7 w3 |$ J1 R3 H
upp_buffer_b
=i;
. ?1 s7 h" W& c
upp_buffer_a
= 0xDEAD;
* y2 I1 L9 J$ t% Z( G4 g
}
0 Q1 `" r9 e: g9 q2 Q/ _
- j# O2 L: [, L9 }/ K8 R! W
//for(i=0;i<1024;i++)
- h9 y s( \( K. X# I5 ?7 T
// temp
=0;
0 y; g! Z8 j1 \- |! e
$ A( S ^* R" c+ Y4 `
//UPPReset();
0 J3 O& x4 Z6 o& [9 s5 M. r
/*启动UPP DMA传输*/
; E& p" W( G# |
UARTPuts("upp_prog_dma_i\n",-2);
' } I7 ~( H0 I0 m1 E
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* f6 [7 h4 N) P+ |/ \6 O1 _
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 T3 }6 R g1 J7 Z4 w* N
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 k/ g! O- I' g1 d2 r- v8 Y
- y9 H* I/ H/ g# x: C- r
UARTPuts("upp_prog_dma_i\n",-2);
$ N) F) C5 c/ Y5 N
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( {1 e6 `: c1 K* D1 w
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" ?3 F) |; u- r
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- q* f. I% B/ V* Q6 Q
+ `1 b! z9 n1 m6 \: A
/*等待UPP传输完毕*/
h3 _+ G9 [8 k/ ~% Y3 A1 N! O- M
//i=0;
5 x# x7 `6 H& d. G
//j=0;
0 L' ?% P3 V! r; M: V4 Z
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ M, J/ `7 U7 ^, W
{
+ ?1 d6 R! W7 y% S+ |$ e* P' l3 b5 b
/* 测试UPP传输的同时操作普通DDR数据
' ?4 D- U/ N! E8 Y# t
temp
=i;
6 q) R4 i8 U7 S( U+ T8 t, s
i++;
7 Q' o; K. R; ?. m8 T( y) r' R
if(i==1024)
, }5 }: b. T# Z6 T
{
0 U& a4 e0 G- q5 n$ m# c
i=0;
" u; c; E% E0 X% R4 q
j++;
Q! N$ N: P' x$ ?; o7 ]' E
}
' N1 X9 X) @% A- p8 ?, G
*/
) n* S) i+ n6 V2 J
0 v$ D; X3 S8 T
asm(" nop");
1 ]7 `0 G* F* w# `& F
) ?( v9 R0 D# ~8 [
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! u. f3 e! X0 K! u- t* I
}
. Y8 S+ b' D, H( L: k
6 f' L4 ^, X. C) T
/*检查UPP传输的数据是否正确 (loopback modes only)*/
6 R& ~7 m/ w: D* O
//UARTprintf( "i=%d\n",i);
* w+ B7 t' W2 ?/ j2 S. i
//UARTprintf( "j=%d\n",j);
) `7 u) ?4 {. O
UARTPuts("Data mismatch in buffers.\n",-2);
! T7 g L8 L* c1 b0 k3 w6 e
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ \6 u3 k: w! N' s5 g- A: Y1 c6 s
{
# I8 e9 v/ u- n# [% v
for (i = 0; i<upp_frame_size; i++)
# p R9 C; N) y4 x7 [
{
}& ]' E' Z- E/ ^4 V/ v
if (upp_buffer_a
!= upp_buffer_b
)
6 O4 m4 d3 u3 x! n3 m; q
{
& U- h5 z9 c" G8 b; p
upp_error_count++;
q9 P& H$ v9 l- Q
}
P, ~* S2 t1 D7 m2 S
}
5 o: E9 V8 W( ^+ ?+ J ?# b- h9 O
}
3 w+ m0 V: Y( v. j4 v4 Z+ X+ _
* H* N$ O2 ] g+ v t$ O" d
/* 报告通信结果*/
* {+ k* j3 i+ y6 C6 z- k, e) T
if(upp_error_count != 0)
1 u3 f8 X5 z0 H) ~: w) T/ h
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% i- Q( x n$ j! @4 |( _" p3 W
else
2 v* x0 E0 C- R C; n
UARTPuts("uPP transfers complete!\n",-2);
C, F; p {; {( Z3 h' I8 d) c, U8 D! j
! S0 D$ @, G: y5 W, b- l( m
UARTPuts("Do you want to print all the data?(y/n) ",-2);
, `- J, j& d! F* r
UARTGets(ch,2);
8 T9 A! A' y6 _/ B( g7 _6 F
UARTPuts("\n", -2);
- V1 ~1 Q" `* Q
+ z6 W* `- J1 G# w s( O2 a* ^
if(ch[0] == 'y')
5 w, ^4 a" t/ b& o5 F* W+ }
{
' A. S% o" w1 N5 G6 R
/*打印全部读到的数据*/
: p# }1 x5 I9 i9 F1 j! {8 t
for(i=0; i<upp_frame_size; )
* i; S9 M, C' q) B1 [
{
# r9 A' y: W/ o. B1 Y2 |
for(j=0; j<5; j++)
4 x. y0 V7 F% e- Y1 O- [
{
1 S& Z1 {; J- q
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; ~6 `4 V1 i( _3 E; o
i++;
: J" J3 m6 Y, k. B& r5 x4 x
//if(i >= 4096)
2 ^$ s+ g' @: @' `: x/ a) |4 y0 Y4 z6 y
// break;
* K6 Y% I$ x3 Q* F. y; W* M
) C, w5 |3 x3 }+ ^
}
. n- s1 F. K* j9 v* }0 |, V- @
UARTPuts("\n",-2);
. `: h8 e7 ^2 a2 m) X- {
}
$ |6 r2 s3 F5 i0 [7 ^
}
1 o, x$ N$ [: S
& G t( l: j C7 [" H3 E( d9 i9 H/ e
}
1 a) Q6 _' j r2 z1 K
, h7 m! G7 d9 j: T1 Z
( Z0 |+ U& v+ V) h4 \
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* ^# |; D8 g" k k7 b0 }/ g* M6 E$ A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ ?0 F. I, w4 f* v$ `, O
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4