嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 s0 G5 H: P9 n0 t" f
Void UPP_TASK(Void)
$ _! U; X6 Y9 U/ q9 E
{
7 O0 U8 H0 c' j$ m) ?1 T ~$ c
: q/ ?9 _; x7 `& P
int i,j,k,target_int_count=2;
7 ?% H- n1 n" ~' c3 M# w
char ch[2];
, u, U) M; ?. r0 U# q. I* @
/ i! ~1 o& c+ i4 b
( F; E) T8 h7 T/ Y. O% l% m
9 m, K" y8 ]6 g5 b/ t2 h6 L
upp_interrupt_count = 0;
9 v$ @) g2 f" }5 N# b
upp_error_count = 0;
. p1 u; H% j9 e+ P8 \
) R. j, a. z# O. G$ }" C* n+ _! @ Q
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* u9 r7 J$ }" e7 [- h
// Initialize data buffers
8 q/ h$ u j K0 u4 E
for (i = 0; i < upp_frame_size; i++)
# b) `. d1 ~* S. ], J
{
4 e, H9 V m1 ~! o/ D
upp_buffer_b
=i;
* M9 L4 S0 J6 B' I% t) w# I7 F6 U
upp_buffer_a
= 0xDEAD;
5 y" d4 a: I! ?* [. r0 |4 Y# u
}
4 k% f! ^9 W; Y/ C: c ?
5 }) g- X3 B8 Q) k/ I# p7 N& F
//for(i=0;i<1024;i++)
4 m4 _/ m8 ]. C: h
// temp
=0;
) M) b1 ]& r% B" ]! d4 O
4 B% a6 g0 o. l) \" z. X" E
//UPPReset();
0 D& u! W0 f* z6 d: T3 Z
/*启动UPP DMA传输*/
: \% @7 h- Y9 |4 { H! {/ C; R
UARTPuts("upp_prog_dma_i\n",-2);
' q4 {( S. Z0 B: m& {+ d
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ ?1 F3 W/ c9 j6 Y7 ^% O6 O) L
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: B) y. X, ^4 d9 R3 ?1 w J
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% k$ h% a" l$ N3 l
1 b6 H, e y: U; i% m; i/ v: A
UARTPuts("upp_prog_dma_i\n",-2);
( h; r+ u: s+ n: i8 k6 c( Z$ C
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 e4 u# n7 v1 A" ^: P
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 ~8 v+ Z3 {: O
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) X) k, I: P/ p
* W& ~( q% c; Q- D6 u2 `0 J
/*等待UPP传输完毕*/
! S9 d# ] }; ]* [ q7 X( H
//i=0;
( g+ C" s/ f' T# b' }& y$ ]' o" K
//j=0;
( Q6 @; {, _# j/ j
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' v' {, j: q& ~0 S0 e! v+ {
{
7 w- ?, u. V) a9 q$ R+ N
/* 测试UPP传输的同时操作普通DDR数据
* Q `- R9 k1 p8 Y5 m/ B7 J! t" k! Y. {
temp
=i;
. i1 ]9 q/ n1 p9 M+ i
i++;
" }6 [4 N& v9 [1 f5 @- _6 H% Z
if(i==1024)
) ^8 [4 A4 D% G. X2 h, y
{
* z( Q( B& s5 ^8 a2 q
i=0;
+ x4 \- U! U0 l( W% I% e
j++;
- {- X" `5 A1 d# O
}
' A& [7 Q' G2 O
*/
?+ s- w, d" ^4 b- y0 W8 ]
- S2 d/ I3 D! M0 U
asm(" nop");
' _) P6 f4 i. b0 }0 ^
3 c$ I$ N. S! l! c. I
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 b9 ]. D o- y! y8 d
}
Z5 w7 C* ?3 D, {, s
+ I: @, V3 z# h
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ S4 l/ d$ F: d9 P; {. d, G8 a2 L
//UARTprintf( "i=%d\n",i);
B2 c: |6 R; D0 V- Q9 O
//UARTprintf( "j=%d\n",j);
% w: @$ I I8 T7 z( S5 B, ^2 b
UARTPuts("Data mismatch in buffers.\n",-2);
: _3 {7 K3 ^3 W- O
if (upp_interrupt_count == 2 && upp_error_count == 0)
. A; D% I2 C4 {% a# R, }$ c1 z9 n
{
0 w1 ]( H/ H5 H* V( J, T" y
for (i = 0; i<upp_frame_size; i++)
1 L- ]( ?( {0 |: y- {) P3 E
{
& V }: E# {; u
if (upp_buffer_a
!= upp_buffer_b
)
/ {0 `* A$ w3 O3 {( J. a9 f# ]
{
3 ]' J8 r% B3 k7 q* r4 R
upp_error_count++;
9 Z5 J& C T6 R8 _5 z) Y/ `
}
0 s4 {- M: ^5 H, \
}
! W% l! ~ O; |/ O/ S8 |
}
# ] ~& C7 i5 _/ b
; a! e/ ?5 U4 X9 R: j
/* 报告通信结果*/
+ ^ `: c- V0 i! ~! q( V6 ~- x
if(upp_error_count != 0)
% T. k" q |. y& ?, Q" [
UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 I6 h* L6 Q7 I0 N
else
0 z* } f" L% A# n j/ b& K1 C5 v; j
UARTPuts("uPP transfers complete!\n",-2);
# z0 r( a" U' m, c3 ~% i
% e" E3 T% V) w3 }4 D
UARTPuts("Do you want to print all the data?(y/n) ",-2);
( p: u& J a! b8 n
UARTGets(ch,2);
" e4 s1 T3 F1 O% W! i4 S
UARTPuts("\n", -2);
6 t1 x W8 y0 U' Z2 \" z) ^5 M" q
$ L- S7 l1 D& s
if(ch[0] == 'y')
: ?8 F; s1 G, _" q& D' r4 Q& V
{
# U" G( `% C' @5 X: S3 r- |1 H$ t
/*打印全部读到的数据*/
: s9 F1 t" D E- i* R: p) ?, P9 m
for(i=0; i<upp_frame_size; )
0 D- O3 M( h* l# q4 m8 Y# r" C+ U
{
$ I& [" O* x6 ^' ^' v1 w0 h
for(j=0; j<5; j++)
- P7 ?9 T2 n' f2 N! A* H
{
) ]6 z7 S4 D- l6 G9 e; `! R
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 j& D1 C2 X* @. [+ @: O! @- d; l
i++;
# s3 J: [, m$ z9 G X. ]; Z; \, ?
//if(i >= 4096)
0 D. G4 M4 p# v' {
// break;
* Y0 ~8 d' g I$ @0 l# m; o" R
8 I) x6 F8 k; p
}
) K& ~* ?' \) T& ?+ `
UARTPuts("\n",-2);
, V9 P# ?7 {9 ]. q8 T
}
% y R3 h# Z4 V9 L. T8 W
}
5 |4 Y/ p: D+ m* V% H
J# h: S% v* }% v Q
}
: T2 @( p1 [% S( |8 S9 E, i
) T. V1 |6 z- C9 Q P/ U
& @' V2 g, ~; d6 N% u" g. E' Y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' H& e" t, g" g
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 I: O1 _2 ~9 Z* l: q
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4