嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* i7 a, t+ e) M
Void UPP_TASK(Void)
# v# L: T$ k# a; t! g9 W
{
5 C3 D: {( I' ?1 V7 t
* v! M* [1 I+ _- f( [0 ^8 c
int i,j,k,target_int_count=2;
! y# m" p7 f( @. v
char ch[2];
0 K4 i, o, a/ b
3 c$ x! R' G: S* [6 h
* e2 V. c' L# d8 K" Z
% j, o: u! R9 P7 ^
upp_interrupt_count = 0;
, l% v" n" M7 H. P+ K% T! [4 W
upp_error_count = 0;
Z9 X# d) O' Y
" p* a- N; }6 D( a' Z) n
UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ z1 A) O7 P; c O2 N! j% ~& U
// Initialize data buffers
( S* q3 g3 r j0 R5 _8 g$ R, y
for (i = 0; i < upp_frame_size; i++)
0 y$ g2 B. `$ j
{
; X3 n. E4 ?7 p+ k A B
upp_buffer_b
=i;
9 _( _7 }( B; X% T% ?) i/ T! |
upp_buffer_a
= 0xDEAD;
; ], R7 S( _4 C6 n
}
# l9 r: Z2 ~- e6 h) l+ K
4 G0 h, e. D. K# k* s! \* N
//for(i=0;i<1024;i++)
% V- b6 y" x F7 L; X3 o6 r- h
// temp
=0;
8 O: ]3 C0 Q" _
; N. a( P) n9 Z: @* Y! n
//UPPReset();
4 E( a1 D. _$ s9 M# r- p. O
/*启动UPP DMA传输*/
4 L2 Z* g ?7 V) |# Z* b7 }; m7 t. o
UARTPuts("upp_prog_dma_i\n",-2);
; D" }4 M ?. E2 w/ K8 _7 [
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& V3 Z& a/ z' O9 A" e: _3 D
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) B) W% d( W2 n6 p
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& s% B6 r, o& h4 A) [
" o) T' B8 u+ L. m! A) x# \1 n
UARTPuts("upp_prog_dma_i\n",-2);
* R# [* A6 c- p
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; W/ f# h: `* Y$ c
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ n4 a7 q! f$ `
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 u1 F+ {: b% f0 M0 v
9 M6 y, k* q" a" {/ H o
/*等待UPP传输完毕*/
1 T# ^2 V4 i O3 r& {
//i=0;
4 T7 m9 I/ ~& h3 ]2 Z9 T
//j=0;
* s) \3 p8 W# f3 H7 @$ X
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
x; [3 z) ^# k% Q2 R8 Z
{
: E& B$ H# {' v4 R5 M
/* 测试UPP传输的同时操作普通DDR数据
$ ~, Z1 w6 J6 [+ ~4 o
temp
=i;
# M0 T2 k$ l9 K9 X$ A& G/ y- E
i++;
$ p- v: S Q, |% M0 U
if(i==1024)
* Q8 S1 q/ \) e9 Q" g4 ?! ~
{
7 E0 N8 i3 ^' O" B: \# V, y; Y( o
i=0;
0 _/ ~" D+ O9 O5 ]+ G$ n1 V
j++;
' |- n: V% k: K
}
$ r/ m- g( Q9 K
*/
* W. z8 G2 ]1 [) l
# T1 O1 T, ^( x0 p) I% h5 o
asm(" nop");
) X7 G+ H8 ?" @% Z) Q$ n/ x
! A. l" [: h/ _/ A( A$ H
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 {' x& k) b0 c, l# J. z
}
( \& L$ L3 e1 y. g
& g- S4 ]5 h& @8 p" ?# c
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" N$ X/ K6 ~8 \! Z& T+ d1 m! D% } x
//UARTprintf( "i=%d\n",i);
- B0 B G0 K' u6 p5 T
//UARTprintf( "j=%d\n",j);
, u. L1 F; |* s/ O. \
UARTPuts("Data mismatch in buffers.\n",-2);
4 a& k- Q/ K* n. q- l( u# e, T
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 \% j# y4 @: \9 n8 d
{
2 Q6 k; R7 B$ k8 f& p) Q
for (i = 0; i<upp_frame_size; i++)
/ v- ]8 y1 {) R# v! s; e
{
6 J$ U1 N1 r; ]0 Q" A+ C8 `
if (upp_buffer_a
!= upp_buffer_b
)
4 ^1 C( D( g) Y, N' u
{
4 X: J. p) E V& p6 a% P. o. J
upp_error_count++;
2 o8 }! c L- K
}
8 P8 V3 Y2 W' T1 p5 ~4 M
}
: n- M2 P- W b5 J/ G6 e
}
+ l0 C6 t- @/ d) `/ d, d
. _* P f1 Y$ `# P m8 M& Q
/* 报告通信结果*/
% |5 l, x- r: w9 Q0 d! S. m
if(upp_error_count != 0)
" w# |! t' w) e$ e8 J0 v7 X7 g
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# K! ^ v: X. Z) u+ `1 X1 C# S
else
1 @$ s0 u$ I I$ ?3 R' P
UARTPuts("uPP transfers complete!\n",-2);
' S" e w8 `4 O3 B/ f
1 d0 w$ r6 Y9 g k2 U4 w* ]
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 T, g) J: t4 V' ]
UARTGets(ch,2);
, ]) k; T: u V9 v7 A
UARTPuts("\n", -2);
$ E: j. e" t( h3 c; s
- t$ B m6 F" l5 x
if(ch[0] == 'y')
( r g9 E z! {2 h8 o7 d0 R& i( ` M7 h
{
3 P/ u! P. c* l; E$ |" I( F* b- [
/*打印全部读到的数据*/
& x! l: d8 c! g- e. i2 y# `
for(i=0; i<upp_frame_size; )
1 L: O& I$ u. F
{
( F4 e, E2 e* B8 O, s; z3 N
for(j=0; j<5; j++)
" y Y/ j; P! P1 h5 u% }5 i
{
% i* ]6 p. v3 z( Y
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) }1 V3 l/ O# R* R9 j
i++;
4 A/ m5 k6 p" Q4 t5 C& R0 [
//if(i >= 4096)
6 S8 { `/ y) L3 f2 R. B7 d
// break;
4 _$ v) x. s" \4 Z2 X
& @4 | Y4 l( |- T* {" ]/ o
}
5 G2 K. B( I' }7 o" m0 J6 U) N2 [, s* Q
UARTPuts("\n",-2);
+ ~! E# o9 r/ L2 b/ k6 ^* b2 J6 H
}
6 G* M) d2 E: t x
}
7 v8 \- w1 a2 }( T1 B# D8 ^7 J
) ?3 o" I4 r6 B9 L- k
}
# [! h, ~% S% y8 P6 @8 Z
* R; Y, Y# j3 F) L' k$ n" z% N
) c( u7 g- T& I
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 Y4 M/ u. M. l
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) M/ w. G! X6 v% F9 k4 ~
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4