嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 g* M( ^& C4 `& [+ {4 G
Void UPP_TASK(Void)
9 F" k/ d+ g1 G: O- D' q
{
3 q- n: T5 c# o# E6 U
: S" z% x* G7 g3 ^6 T
int i,j,k,target_int_count=2;
. d& f! P1 |- ?! n- p, _
char ch[2];
1 K* O3 B+ z! K5 ^7 B. u6 ]
5 ^6 s( K( f( m! q) X- ]. S6 Q0 d
4 `( @9 r) v6 X) n$ q
% _& J8 r2 a( h
upp_interrupt_count = 0;
* _4 y' c4 A0 J( \
upp_error_count = 0;
! Q! o# F: q j9 O- c2 ~3 _/ E
. c% A' [& d3 l. g0 k* b) E/ b' r
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! [) _# |" `5 `, z
// Initialize data buffers
/ `5 ~5 @. ?+ n/ }/ Y& `
for (i = 0; i < upp_frame_size; i++)
& H: v# @& l: V1 P* Q- Z4 d! U7 M
{
s4 n) o. _; e' P# m/ K' ~
upp_buffer_b
=i;
3 M: c% G9 Q" e# l8 J$ L% K( q( D U$ L
upp_buffer_a
= 0xDEAD;
+ m) _8 L6 _0 q& N2 B! ?" t
}
; x9 P& o! w3 v
8 Y. b. Y J4 P. B7 r: D* o, @
//for(i=0;i<1024;i++)
1 c2 V) w2 i* k" d, s
// temp
=0;
?1 z, L# l0 D& O
1 Z8 f6 `# L& v9 _* q4 b
//UPPReset();
' j( G: w: o8 w* j: }9 ^2 o
/*启动UPP DMA传输*/
$ u/ g' H! V* C6 a6 v0 \& j
UARTPuts("upp_prog_dma_i\n",-2);
0 l, s; j( a' Q& w/ Z2 W$ s9 u
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* v/ f. s2 u# `/ J7 R
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* F) I2 J" _3 }2 y# \
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ E4 P, u% J* W C+ o& C1 D0 D
, }9 D s: N0 _
UARTPuts("upp_prog_dma_i\n",-2);
: E' F) c4 P, a* X# f* B
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 T. q: ^+ W- B, C) u" _6 B4 Y% u
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% \6 [ o% {+ i% A
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 x7 S! ]2 H- }3 x j1 H
+ T: x2 k" f+ k' f% A$ r4 s
/*等待UPP传输完毕*/
" o3 ]8 b+ n F! R$ F3 }+ h" k2 I
//i=0;
( a7 _1 J" M8 i5 B: P' ]
//j=0;
' I# j4 {# C: k" W+ V8 f" X3 E
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ I6 u- g' p9 |$ r( d0 z& z8 _% y
{
' K# j; r9 A) g- m4 Y- H0 w$ I
/* 测试UPP传输的同时操作普通DDR数据
0 ]; q2 k0 P A# N' u
temp
=i;
& Q. j: Q4 N7 a$ q" v
i++;
3 ^- `0 Q" M) I: v+ i1 b
if(i==1024)
4 C% g# ]/ [. B) @9 H7 }
{
) \/ T3 {9 \* Y
i=0;
$ n2 z) A+ _/ g5 o
j++;
8 _- v- d, M1 f7 d1 t" w5 t+ v) S
}
) z5 v# y) l5 N6 w
*/
* ?2 V% H Z, N8 P2 G* f
, A8 y) W8 d2 _3 ~$ c, t
asm(" nop");
2 f7 N) i3 I* m& b. K8 o' C2 q
6 t2 m& Z9 |. Q. y/ _- i5 U
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- }" \% f( J/ J. H6 R, S% Q
}
: N3 k+ V, J M9 M) c6 |2 m
% \6 u& ^, w0 s5 k: R1 F! {
/*检查UPP传输的数据是否正确 (loopback modes only)*/
- L% _5 J3 d1 F
//UARTprintf( "i=%d\n",i);
6 z% d0 m# T7 E. s
//UARTprintf( "j=%d\n",j);
1 r5 T8 O/ O: r: D$ N
UARTPuts("Data mismatch in buffers.\n",-2);
6 t# x. Q v( o o8 V1 M I
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 _+ e1 O9 |) d9 K* O
{
, ^. ^6 Z: g0 }8 v
for (i = 0; i<upp_frame_size; i++)
* s* D5 C- j/ h. ~" ~# S( B% h
{
- z" E2 ?9 b1 o3 x
if (upp_buffer_a
!= upp_buffer_b
)
3 z5 D! X' D" E
{
, |% d3 j$ |' r' c( }% ?
upp_error_count++;
( ]$ V6 b4 K/ [; y' ?& v1 G" h
}
A* |$ ^9 u9 X% H& J o$ w5 J
}
% U& G Q$ h' J9 Z! m
}
2 d6 B8 N( S9 r/ M& [4 M
+ y6 U2 c3 k4 [( J5 W5 X
/* 报告通信结果*/
# z w( r, ?, L G
if(upp_error_count != 0)
% p" b2 F' T. \+ v
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 L( V7 a% d- X( y3 |# _
else
" ?) T4 l/ r9 L
UARTPuts("uPP transfers complete!\n",-2);
4 I% s" _8 N$ |4 d
N8 [/ q2 O a' S
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) Z% I: d d" q$ U* Y" m. F
UARTGets(ch,2);
+ }" M* k. i! G; Z4 `* a5 y
UARTPuts("\n", -2);
. X8 O( p; r2 C! L% ]8 \
) X* k+ h* I9 q
if(ch[0] == 'y')
7 H( _2 b# u( g1 @
{
2 B0 {: P% ~6 M7 }5 m. B" f
/*打印全部读到的数据*/
1 ~+ T% |; j H0 t5 W/ _7 E. p
for(i=0; i<upp_frame_size; )
# ^/ o* e# l8 H$ z4 b
{
( n: G& |6 g# c8 G
for(j=0; j<5; j++)
1 a5 i' G8 j4 X( r( M" k* S* n
{
% a) N- ?2 L1 e ]$ H
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
8 q3 X% C1 e% p, i1 l& m4 D8 _6 N
i++;
$ [+ L. a& {/ f, z) b3 J
//if(i >= 4096)
) G5 q6 U3 W" g9 L) P
// break;
. k4 o) _& N- b q- S
/ N) [! B# Y. D9 \0 S: K e
}
' x# R& P% K' v; F9 @+ A7 f
UARTPuts("\n",-2);
* f) T9 p6 S" M& s% {
}
2 E; A1 K( Q# E8 F1 I9 n8 {
}
7 |& D, a7 y# e0 z/ Q. L* J
/ \7 V" R, N# B
}
3 _$ g) f0 K' h/ |1 X6 p! j# h' K
- f, D) Q" Q- d3 o
, }' S+ @: L1 y, F
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 d9 ~) e0 I8 X# u/ j
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 d, a: C. q, V7 I) }* V4 r+ M
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4