嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 g/ f+ w6 O8 D$ {% h b6 k
Void UPP_TASK(Void)
5 S$ G- ~% S: n( \+ V, Z$ l
{
1 g p5 t; v2 u/ s, L$ _! N5 y
* N4 w2 U% X1 V3 f! j+ n( u
int i,j,k,target_int_count=2;
! [5 X0 A, p0 l5 v' u
char ch[2];
4 @$ c: |) F' ?$ K3 M; k
7 ^9 ~# f7 J0 R2 c
: i: t4 ?- [1 l% l: I1 d2 V1 c/ l
" F7 h& t+ ]4 a
upp_interrupt_count = 0;
9 \2 `5 e/ o) K1 i
upp_error_count = 0;
* ~4 m, C* S, {7 K! W
' E5 @; Q0 u# q) e) T2 p) F# r
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 p* t5 H- R7 x
// Initialize data buffers
. J( R6 w6 |' [0 T6 j) U
for (i = 0; i < upp_frame_size; i++)
& J5 ^& k5 t, }2 v
{
& N% x5 d2 T$ ]& P7 }" D/ z+ L3 A
upp_buffer_b
=i;
3 f1 R5 @. v5 N" u
upp_buffer_a
= 0xDEAD;
/ w% P: ]" u- @) ~2 B
}
+ Z9 ] O! X0 R* f; f6 ?0 C
- G k2 b! i6 T& i$ M
//for(i=0;i<1024;i++)
' H( ?5 g5 z2 S' X
// temp
=0;
4 a1 F+ v; y3 P8 s2 Y7 M
9 v% o/ L( \. L$ S. q, ]0 z, u: t
//UPPReset();
' q' k1 y3 v4 V
/*启动UPP DMA传输*/
) s2 o+ B3 q b d
UARTPuts("upp_prog_dma_i\n",-2);
0 I. R4 I; Y0 ]- K
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. m+ w& J, `8 M9 ]0 c( F7 x2 y" F. h
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# {1 n/ h3 M; |+ s
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- o" w& b( O, d( F+ {
& x* G* v" l4 N2 p+ r
UARTPuts("upp_prog_dma_i\n",-2);
; @: [$ `/ l- m5 o
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' L: w6 X: R6 i
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ G* Y3 `2 K$ J/ k& [
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" V0 ~ b' W6 C. \7 \
. Q5 q# R2 h) C; P
/*等待UPP传输完毕*/
( D$ d/ `/ }5 B8 s4 H
//i=0;
) w7 U! J# S% x3 I
//j=0;
/ R* m; g5 O! ]! t6 c/ R
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: j& \9 v: W% C3 L/ O0 O8 [5 U! U
{
1 `7 f; n/ D7 T) C$ x V% p
/* 测试UPP传输的同时操作普通DDR数据
- M. |* j1 I2 P! ^
temp
=i;
5 d, V/ P) u' C5 q! ^9 S$ y1 n
i++;
$ G# V4 B. E) a' n I
if(i==1024)
W Y4 B- W# ~/ Y: P4 L
{
, k" ^7 L( q7 f `
i=0;
" q: C5 n# {3 p! B
j++;
) e+ }) ^3 U8 \' D0 U' ?
}
' M" N& u8 m) J1 J8 X8 o$ J
*/
7 o7 a* N6 Y: J5 x9 a7 r) V) v( R
8 c# T7 o0 I" G& N/ c& Y) L# [' H
asm(" nop");
5 `; g' k/ K" c+ |
: E% `: O+ p- P" i/ _5 X5 J
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% A8 {7 I1 f& }/ s' q' R A( h+ T2 T
}
6 s! I8 e; w, e
7 m9 ^5 U; v' j- t$ ]8 v5 d
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" s( n* @* n6 o, [; `
//UARTprintf( "i=%d\n",i);
' {. c" [4 e8 l# k! `, W
//UARTprintf( "j=%d\n",j);
M% u; I1 @$ S3 y7 F) G* V9 `
UARTPuts("Data mismatch in buffers.\n",-2);
! }; W) @9 i" ^. x9 z" p" w
if (upp_interrupt_count == 2 && upp_error_count == 0)
; L0 g; e! Q5 d" J3 Y# r5 b R2 t
{
; O8 C5 `0 k) I5 m( a
for (i = 0; i<upp_frame_size; i++)
7 B/ L/ H. e( I( q
{
g! w( |6 _0 _- R7 F; c
if (upp_buffer_a
!= upp_buffer_b
)
; f0 Q0 B& h k% j- n& N o6 G8 {. N
{
, ~) g# Z3 c" x5 k- W$ |
upp_error_count++;
: J1 c9 W5 k* c2 X: g2 m7 _/ H( C6 A
}
! U/ V$ o& z- j* U
}
L! l7 j! v9 w3 J3 N: p2 s
}
( N5 m& _: r2 z' ^# @
0 y! x5 y, k% i3 {
/* 报告通信结果*/
# }2 p# D) X: C9 K
if(upp_error_count != 0)
. ~2 N6 n+ @2 T' H2 D
UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ ]. y. \4 h3 w. R; M; \2 S
else
) K8 I4 l2 k% y, A I
UARTPuts("uPP transfers complete!\n",-2);
3 M. [: q; [' v5 G
3 p) i/ ~8 l0 g9 u8 {' F
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 K8 F9 W, G% C0 |3 C9 s1 `- N
UARTGets(ch,2);
% n9 b/ a- o4 k7 j9 x+ ?( |
UARTPuts("\n", -2);
3 w) c" L3 [+ \1 n. }. W2 O
; E- D; _* [# f
if(ch[0] == 'y')
7 ]/ R' l9 q; _( x! B
{
' G' [% m$ i E' n/ t, R+ ?' w
/*打印全部读到的数据*/
$ I; x: X }" `! v1 _4 C
for(i=0; i<upp_frame_size; )
9 @ _" _4 W; H! m# T
{
! H6 v2 }% R: E# P: V
for(j=0; j<5; j++)
6 x3 i2 b) B* h9 K+ u- w4 |+ G+ c
{
3 ?; z- w! K, c4 H6 w
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- e+ a& M. {9 c8 p( G/ A
i++;
* T/ a* q; w" @: {' h& X. X
//if(i >= 4096)
% }) X5 [! V" K. `
// break;
5 |9 S, D( [" W8 l
4 y4 I; J2 u1 e; a6 s X8 p! L2 G5 y: i
}
! {, O5 |1 C0 y$ _
UARTPuts("\n",-2);
# D# O0 K6 w$ a: J6 J7 T
}
6 F4 w' G& H6 G
}
9 ^, Y( g+ |: y: r: K @
m) j6 E U: ?4 {- b+ ~0 A
}
. _' x) X% s6 [, D) k6 h
1 ?; n; F0 w ^: v2 V
% n$ |( l7 S8 M: c/ | Y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( y5 g) B2 p6 R; s( a* T
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 u7 A" ~0 F; ]# F- v; c3 B* |6 p
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4