嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ b$ j ~. R: t( M! x* v* y" y9 p
Void UPP_TASK(Void)
4 @! E: Y3 M3 N% P- z
{
. d2 U. Y% _" L+ q' N8 O# u
3 X, B+ s- h& j0 i# G8 V3 O
int i,j,k,target_int_count=2;
* [$ Q5 F$ G; I( a7 X
char ch[2];
- H r/ o5 P5 l% v. C2 V
- H) S* v* Z: D; X3 [" Q
) c. ?# ~; n: V5 x* J! j# \
_' x& G: h" Z1 [
upp_interrupt_count = 0;
$ z- e1 q$ g' V: E, C0 s
upp_error_count = 0;
* u* f7 q4 E$ D" N# T9 c" D
* G4 b1 @7 [2 _. P% w
UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 e q; h6 u% [8 Z# p- o
// Initialize data buffers
6 Q- Y% F/ V8 r+ B2 p
for (i = 0; i < upp_frame_size; i++)
" }; Q& }" a( p& {/ c; B
{
! l+ G! p c& ~/ \" d7 L
upp_buffer_b
=i;
' ?6 E! ]+ l& G0 |
upp_buffer_a
= 0xDEAD;
) S, x! @0 N+ v4 @. c, }
}
8 B1 M3 A2 `$ b% d! G
/ a2 Z7 i: f' Q M$ V: b
//for(i=0;i<1024;i++)
8 Y5 e. D; |+ X
// temp
=0;
$ p+ m' B- q9 x
/ U# Y2 g4 ^. z5 h/ u
//UPPReset();
0 ^5 x' l: i& _8 Q- F6 f F
/*启动UPP DMA传输*/
- [2 m4 ~, _3 k
UARTPuts("upp_prog_dma_i\n",-2);
0 Q& w' W4 [7 N' }" |
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% |% {5 c$ b0 }0 U2 L. H- Q* z
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 g0 }! L) z1 R: g" w/ a/ r
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% C1 t! e. A( ?. `/ R
9 q- \+ N2 E( }" |, Q$ `% ~
UARTPuts("upp_prog_dma_i\n",-2);
; F& @& }( {+ D K2 y1 ^/ D- h
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( p9 ` Q5 b( ~3 J: G* d- r% h
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 X' E# I5 M7 ^$ G, p, U8 d2 k$ a
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 W, A4 b! K. y3 _- b- j
; W7 }, [7 n: X3 Y+ Z
/*等待UPP传输完毕*/
8 t) t" ? n4 ?9 t& f) w1 ~9 y0 w
//i=0;
; h/ e! t- K* D1 N# `
//j=0;
: n% f& E+ D" x
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* H+ H. [! ~! O8 r/ ]* @- D$ K
{
2 |; U" W& \- g/ }
/* 测试UPP传输的同时操作普通DDR数据
* E% l% _1 l9 u) f0 b& a! A0 C
temp
=i;
2 D8 o: Q! v# b+ o1 X8 G
i++;
: m9 B) M) j4 S* C3 k; n/ y
if(i==1024)
9 P5 p ^6 s3 s7 L& v5 u7 W
{
P9 e. g# U4 T, Z4 w
i=0;
9 B* [, C' t$ N. F
j++;
* z( B# [& Y" X' d5 G: K
}
6 \- Y5 G8 s( z4 f5 y
*/
' @$ ?3 ?% ]8 n$ }$ s8 P6 e
. L( d6 J, G5 `+ p* F Y. u$ R- C- {
asm(" nop");
: y# R/ Y6 h# |) P4 ~
4 y# v% \' l) E3 _) F2 t
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( z2 C- S& u7 I( D5 w
}
4 ~8 y! N4 l) v- g9 ]
' D) ?9 ~7 U! T. D' z! ~$ P: u( c G( s
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 v; L( i; | Z B* Y6 W
//UARTprintf( "i=%d\n",i);
4 Q8 y4 }& ]; l% B2 ]0 O
//UARTprintf( "j=%d\n",j);
0 Q: Y; J; O8 f! J. t2 f* T
UARTPuts("Data mismatch in buffers.\n",-2);
% U7 [+ f" [) A) ]# X9 N
if (upp_interrupt_count == 2 && upp_error_count == 0)
$ ?1 n9 M+ r8 i5 ]6 D3 @& u
{
" w% r+ ]2 c8 h- Z5 o
for (i = 0; i<upp_frame_size; i++)
( Q0 T5 k- ^5 w) m$ Y4 m6 R" y/ i
{
, V8 l6 D) }' T8 H+ A
if (upp_buffer_a
!= upp_buffer_b
)
$ G" N9 G: J, _. {8 D5 h
{
6 c* H- D) ?* h2 |2 G$ f
upp_error_count++;
2 F2 C, ^/ N( k. }& W" x
}
! T# _4 K9 B! e3 ~9 W
}
3 C. r# V7 H8 X: [( U8 y
}
& \6 N" q: R7 X% j9 E
' q8 e; c! m+ K( \, ^0 T. q0 A5 V
/* 报告通信结果*/
' u6 J* _$ b! c2 }3 y2 w0 n+ i
if(upp_error_count != 0)
. A! i7 c( u O5 e, ~& k* Q0 Q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. U" \& E- ~9 @/ B
else
5 U: E5 }8 g* Q$ d
UARTPuts("uPP transfers complete!\n",-2);
4 I+ u( w4 k9 g9 b) P! y
* L+ L8 ~6 }: `+ d5 |3 m, P
UARTPuts("Do you want to print all the data?(y/n) ",-2);
, K5 G1 i) T! {$ d6 b2 M$ j9 J7 w
UARTGets(ch,2);
4 P5 i* _7 [8 ? b% F8 }. W- ^. D
UARTPuts("\n", -2);
, E% ?- V: [% M! W) _4 W
: k. S& G# z* ?
if(ch[0] == 'y')
9 @) O2 f: E7 y* D
{
, K8 y; m7 T7 F- ~7 O
/*打印全部读到的数据*/
! H% h g( l) V# t0 n* ]
for(i=0; i<upp_frame_size; )
3 _8 J% ~& h. l( C
{
& Q) v- `! O9 U2 _. y
for(j=0; j<5; j++)
* n: [8 t. n2 q4 Z& f# G: C
{
4 u* q& G0 ]' |1 @4 n. l! r. |
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, a" ?9 D, i- z
i++;
7 ]& Y8 l) g) a' E& \
//if(i >= 4096)
" B+ I! |1 T( y! u' P1 x9 _
// break;
" E: N$ ] \8 G* Q* g9 E
5 p' i4 s( H5 W' |1 \' d) [/ ]" V
}
e+ Z3 N1 j4 b& p Q* o$ e0 F
UARTPuts("\n",-2);
' t9 m' m0 y8 T3 v+ V- ?
}
) _! w* D6 S( \+ m& c+ u
}
1 D; ^6 y. _% I* x! k7 l7 y! b
# w$ [5 B% W( Y$ B
}
p2 s; T5 I8 P3 Q- Z2 S
% H8 }1 v6 l9 L- }
. K; l. s! \+ ^- ~* X
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! d4 }% B9 w, ^5 c/ h$ r2 d
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 |$ t, j" I2 g. _: e3 _
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4