嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 O, r8 C, Q }/ ~+ u- k
Void UPP_TASK(Void)
; r8 I' |- C9 t8 l$ s/ N
{
& b* U( w$ J' p" `2 F6 }) f" U
" E7 f/ s7 ?7 D6 s/ I! ?2 X. f
int i,j,k,target_int_count=2;
?, } w% e% {. I; A$ w+ H
char ch[2];
9 P! s+ | ^( M0 U3 c
/ T$ I/ b/ |- `- s" z( M
' r8 c9 B2 o7 }7 Y4 |" {
: J6 y- l; L; a+ O8 x: W0 o r3 t
upp_interrupt_count = 0;
$ ?: m* B% l& x/ x9 `- Z+ B
upp_error_count = 0;
! {& @5 q/ ^( ]4 E1 g& O' Y3 x
; h. ^ ~+ y3 |# Y# m
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% i/ \/ ~9 T2 n$ A* x5 ?
// Initialize data buffers
4 x$ u' J% @# e4 a- W1 y
for (i = 0; i < upp_frame_size; i++)
. u; d5 `( @1 d
{
0 `" h: ?$ j, i5 r8 K; Z
upp_buffer_b
=i;
' N: N! ^& G% c
upp_buffer_a
= 0xDEAD;
' C0 Q8 ?/ W2 j/ N! w8 q" U
}
+ p. O( W: Q5 ^5 I! B
0 k1 b( q9 O( Z* M! c0 g' {4 b8 |! _
//for(i=0;i<1024;i++)
3 u& ]0 q5 o9 X9 i7 b. R
// temp
=0;
4 P8 r0 @1 G$ c6 l" W
8 ~8 b/ N! ]! Q Q/ b1 O. }
//UPPReset();
3 B+ G. n8 ]+ }9 Q
/*启动UPP DMA传输*/
7 K A8 s7 S+ i& M" Y3 D& p% l9 n
UARTPuts("upp_prog_dma_i\n",-2);
" h; j; w @6 q x9 h
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' a3 Q) T8 e+ H1 C! h$ K
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 Z- u; F( m- f( E( x, M' I
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 J4 A( p$ l" U
( T) r+ X% m% E3 i
UARTPuts("upp_prog_dma_i\n",-2);
# x( y e# K6 P9 u- A6 f. |" A- `' Q
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 m! X& t; {8 V# f
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
_! I; t) ]+ _' K% S( ?
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ a! S, i: D. s2 R' q5 g I& |& C
7 m8 k; @. I( y) {
/*等待UPP传输完毕*/
; I! {' p# E5 }! F# H
//i=0;
; l, s6 d, G l
//j=0;
$ p; Q( J: U/ V; f% z! J: J
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ s( D. B+ y: e* L3 j$ m
{
. X4 ^5 Z: C3 {5 L
/* 测试UPP传输的同时操作普通DDR数据
. e6 i- y: }$ L# Q1 m6 X3 R; J
temp
=i;
$ D3 j# Z% ?- Q& M7 P2 ^
i++;
* b' b" F5 i1 D, i; `* t) B E! j. U
if(i==1024)
9 e; |5 P: a" m) t: b5 n
{
) e; D2 e7 x; X) [( J
i=0;
9 z2 @8 R# I, O; h5 f4 B5 A- _6 h
j++;
, \' b# T2 F* t5 v0 Q, o
}
% b; j7 Z% `7 {9 f% V2 g& m5 I
*/
3 J- ^' W3 L, e! Y$ e: ]
2 L. r: {/ X. t# Y, C
asm(" nop");
0 ]( b. f4 C$ N) f4 \
+ U8 d6 B3 s1 V) n: \
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& |' E& _8 b- ~, |5 n' z9 a( j" L
}
9 A' X* m) g# q' N
1 Y- R- k% O- D
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( Q7 L- `7 _/ G+ |" s
//UARTprintf( "i=%d\n",i);
3 N9 h4 S3 ]* [; N2 k0 c
//UARTprintf( "j=%d\n",j);
* S7 v q7 l: R2 Y9 h
UARTPuts("Data mismatch in buffers.\n",-2);
8 x+ A) P* [( {0 i4 s5 E
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 W( G+ M: K% |( K
{
( s1 T( z; j7 c$ j/ d4 j- g' \
for (i = 0; i<upp_frame_size; i++)
$ ^+ S6 l5 F* f! @* @
{
% M, n; g. @8 [
if (upp_buffer_a
!= upp_buffer_b
)
9 F/ O" C9 I; ~# _1 ^
{
1 m- Z% b h: v5 i$ w& ]
upp_error_count++;
9 [% p/ N6 ?6 ~" B# g
}
9 z3 W8 Q7 ]" S& X
}
9 H2 p/ A3 P; @: D
}
; j0 a+ I/ ~$ u$ | P8 {! e- c+ W
8 O: v" }( F* l! U4 H' d7 Y/ }
/* 报告通信结果*/
: l$ }2 ^5 R% u6 x& N; L: Y' S5 n
if(upp_error_count != 0)
: D$ v1 b2 j3 c$ L& l
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% N$ T2 W& o9 c# X, Y, Q3 E ]1 T
else
% H/ N" i. D; H, j2 [1 N$ O: b; e
UARTPuts("uPP transfers complete!\n",-2);
( w3 Y1 D8 z& h* i+ J# C$ q
: k2 }' d" k4 s5 @1 {1 E
UARTPuts("Do you want to print all the data?(y/n) ",-2);
( Z4 r# P8 u( q/ E+ a! g3 s( R
UARTGets(ch,2);
- R6 M7 W( ]. U
UARTPuts("\n", -2);
# q0 ]: M+ k- {
, O. l( w+ D. f" S$ O6 w
if(ch[0] == 'y')
5 y( v4 D) \, x9 d; D" B: r
{
: n# V1 l& j9 x! n: ~6 W) O5 o
/*打印全部读到的数据*/
' r2 K& T) ^( e9 B/ b; N
for(i=0; i<upp_frame_size; )
+ }3 R* N* W. A5 d
{
7 Z9 f4 \1 Q1 P6 `5 P' j4 \
for(j=0; j<5; j++)
) [ i6 \/ k5 I9 E0 ?
{
8 J4 Q3 {/ z$ ^$ T7 r% k
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
m( R3 I* Y/ z5 j1 B E H
i++;
" b& I4 M0 P4 [0 j
//if(i >= 4096)
" i% m8 w' m3 i: w- S
// break;
8 Z" v, {" q. D, q0 L3 s
8 \/ J. e' y" c- S
}
3 }$ s* B& h( d- Q
UARTPuts("\n",-2);
/ F3 A2 ]# a/ X: {/ K
}
. Q, m' Q5 O: {$ V9 N) o2 V$ O& |, r
}
) R1 R, j9 V+ g( C
i+ ^* d5 D6 p. Q
}
7 X) g4 f- e3 o) e* g( J1 X
5 l+ U0 r7 c7 M& m3 Z
/ G1 d7 e: A: l. n7 j- k8 R
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 a% N! s% q& E, ~5 U, n8 X- `5 U
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& o$ H, w9 {, f- d& w* G: y% [
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4