嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) c" l6 h7 q2 S3 D6 \7 ^% U
Void UPP_TASK(Void)
# ?* ?, L( S! {9 f1 p# L
{
4 f" O. q; ]" p% ?0 w% L) \" |9 N
! y) D2 K" a/ S- C
int i,j,k,target_int_count=2;
: n# u# U- G e) C9 _# Z9 m8 n5 R
char ch[2];
) j+ |: z7 P8 e- v+ c4 p
; S% k7 ?9 i( q$ C' Z& F. W
; q- ~2 l- }* a0 q% y
% E9 y- L3 D1 L
upp_interrupt_count = 0;
% A4 J6 C2 B& P& I3 E3 ^
upp_error_count = 0;
0 B. Z% ]+ S c* i3 O
! Q1 ~+ j6 q6 E9 j8 F4 D N
UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 C! E$ Z( | A7 u0 {
// Initialize data buffers
; m2 \. g) }3 y
for (i = 0; i < upp_frame_size; i++)
; Z# c9 l" \) N+ m4 l
{
; d" Q2 N- u D- t
upp_buffer_b
=i;
6 b& l2 j; T* z9 g& u9 n
upp_buffer_a
= 0xDEAD;
* D0 Z5 l* d( y3 P% I
}
4 g6 M/ m" }; ^
. B# z1 S d1 m" x$ a- W' \( e
//for(i=0;i<1024;i++)
2 a9 {- \* @% c' G/ l
// temp
=0;
9 E$ d6 q( E' D
0 N/ |; k; c0 F E
//UPPReset();
8 E' j, b# r _- W8 b; Y+ [- J
/*启动UPP DMA传输*/
) H# Z+ d( N4 ^+ G/ l0 a7 t) T
UARTPuts("upp_prog_dma_i\n",-2);
7 R5 n; `% W9 T6 T/ C) F
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" J! a( B+ {4 f' }% {/ _) r1 k6 v
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 h) Q( g) A' z" i& @2 x/ O
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* G0 |, c% L& n) z+ B. K
8 K' N' Q0 d# g6 ?, T
UARTPuts("upp_prog_dma_i\n",-2);
- V$ [' M) |. O( }' H- H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& D5 q: f8 E/ v- ]6 _
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 a7 z$ [9 X' {0 ]
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 c7 t9 g! g8 k7 W+ W. b
# y) `( R: k, i& n
/*等待UPP传输完毕*/
p* V6 d& i6 D: h* \( P
//i=0;
. W- U) f3 s! a/ V! n) p3 [( a w+ i
//j=0;
$ T5 I, n8 O9 l
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( l# Q4 d- h/ n
{
$ U& R& U1 i2 m: M* H' H
/* 测试UPP传输的同时操作普通DDR数据
- b0 N1 c6 m) G+ J3 c: C" ?
temp
=i;
) m* S; Q+ R" c9 u0 i
i++;
: G0 o0 T0 ~6 {) {. m
if(i==1024)
7 P& C1 K8 t* E3 `( w" Y
{
+ ]/ }) \3 U5 c* w4 u: F
i=0;
% |& }( E1 y% N" a" I U
j++;
0 j* z; P Y) y( }; m
}
& H: i% j. H' B) @" z; E) _% N& |
*/
9 b& G G7 H8 n+ G! E7 e6 E3 A+ ~# \
/ E* g! Z: |% l( k
asm(" nop");
, K- i) @$ u; t+ _* x3 B, _, a9 R
# E3 t! A' t: r1 K
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" |3 I8 x- v' l4 }
}
: i$ f4 t' d' e; ~$ V/ d% }
5 Y; p8 {, Q. M$ u( H
/*检查UPP传输的数据是否正确 (loopback modes only)*/
0 c# ~) }: k/ _5 e3 \, X' e
//UARTprintf( "i=%d\n",i);
: O9 J G2 B! `0 H, W
//UARTprintf( "j=%d\n",j);
6 ]% A9 I1 I8 U# R. h$ E
UARTPuts("Data mismatch in buffers.\n",-2);
' E) a7 Y; ]5 S8 Y
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 v4 j/ \5 T; {
{
+ z6 Y5 M# U, t$ g( R1 P y9 z r! `
for (i = 0; i<upp_frame_size; i++)
' u7 v6 r6 m" M0 @
{
9 b% z: r \# a% ~ i8 r* M
if (upp_buffer_a
!= upp_buffer_b
)
) V2 Z8 \, e$ t- j
{
/ o6 h- q' a( G! s! h
upp_error_count++;
2 j$ w$ T0 c: d: e
}
* M# ]/ d- C7 b8 c2 ?! A
}
4 B& n5 h1 a) N: a% ]
}
% W5 ]! S2 k, I/ w% c2 I
, ]3 p, H$ s4 @; Z' H0 V; s
/* 报告通信结果*/
' [3 X; j+ t' k! L/ y# A& @
if(upp_error_count != 0)
+ H; d. m4 W# ]
UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ w* T& v8 K+ L/ T
else
. [) C( C" ~! S" n$ d
UARTPuts("uPP transfers complete!\n",-2);
) Y/ Y* J4 F: L, s* P' n6 C1 {* W
% @9 c4 u7 d9 r% h6 t: p( Q6 G
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 V" ^/ s1 G$ s" u4 `5 ~
UARTGets(ch,2);
5 y5 K8 ^4 D3 {, `
UARTPuts("\n", -2);
7 t7 P$ b+ E; Q4 ?9 w+ B' S
! K8 _2 |; d* d. T7 z% B4 f
if(ch[0] == 'y')
. g, }6 Y+ J$ z' ?& V+ u# p
{
# ?- ^$ |3 ]$ A" P3 {: l
/*打印全部读到的数据*/
4 \, k- z5 U' K' e8 [$ G
for(i=0; i<upp_frame_size; )
0 L( C6 D t; h" \7 `5 Y
{
3 f) i/ {! ?3 ^2 h# O5 s" ], \1 A
for(j=0; j<5; j++)
$ t; B" c( T+ z5 x/ p& m
{
* X1 v, P" b7 m* q# b' f
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
" F1 D9 V* |! W5 ]. t& m e/ ]
i++;
/ T2 z. u- _9 |/ M* D( W
//if(i >= 4096)
Z C4 `! Y* N. |" o4 n8 J+ s
// break;
4 b& ~7 p2 k. Y6 {% Z
/ O+ `% L& B8 m% b1 Z! {
}
" G- P1 c1 c) f, F. U
UARTPuts("\n",-2);
, J0 A& g3 F" `) ]
}
, N4 e8 K. _, L& |1 Y
}
y; _2 U" y J d- R( W
5 T9 |" M9 h3 \# }, U9 L
}
5 m9 k: h y3 M& q; E
& Z- h1 e+ t; ]& P' J5 M" h' C
/ H# s1 c3 m1 E; y+ u" m( ]
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# q* v% I2 ?9 w1 s- n/ A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 w* s0 Z% }5 `7 v
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4