嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- L. {7 L$ l( u: @2 _
Void UPP_TASK(Void)
+ L0 W" i, T( q4 D
{
1 w. [' [7 k; Y$ ?6 u @
1 z1 z& j z! e8 A0 n8 i
int i,j,k,target_int_count=2;
8 E/ t ]: G# N% b q& L- e
char ch[2];
$ ^* |! S; ~* Z! A1 }
5 M; o6 n! y2 x4 a2 V3 K3 J. R" D* e
# j. L$ Y# `, p& l+ a
$ h" D# Z1 o% `
upp_interrupt_count = 0;
! q" }* x6 ~0 g
upp_error_count = 0;
& V/ C5 n" f5 s8 @! U
, U; h! z# V& [2 T0 q. n2 |
UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 y/ w+ k1 ^1 f8 {. c& W5 B! B
// Initialize data buffers
% G. p7 ~' a. R8 |5 M
for (i = 0; i < upp_frame_size; i++)
9 ]% H4 `. o/ l
{
' n) x4 }% c. t% e4 Q8 ^
upp_buffer_b
=i;
+ Q7 V! h P' M+ k
upp_buffer_a
= 0xDEAD;
+ W0 }" o0 R( ^
}
5 p' q- ]% y" Q6 S7 \0 q0 s' `7 M
: J' a. n- C* z& t9 W* ]1 N8 W, L
//for(i=0;i<1024;i++)
7 @- |) v% b% `$ G M! [# ^) C
// temp
=0;
6 F4 n8 |. H( N, ~& Q! d* J7 i
; c, f o0 _# i$ Q" L$ a# g
//UPPReset();
+ E' g+ Z8 V& e( ^* F& f
/*启动UPP DMA传输*/
, p5 T; s" C4 {6 u/ [7 l
UARTPuts("upp_prog_dma_i\n",-2);
2 f( e. H+ j$ Q, @9 s8 \4 G5 P
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 N- M$ k# f* _/ E
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 z+ m' N9 G9 }; `
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ |5 F6 h5 Z. B6 P% V' k# [5 R- M/ F! i% Q
( x! y$ k; o; F) i
UARTPuts("upp_prog_dma_i\n",-2);
0 B6 m! z4 S1 K$ g
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( i' K- U; r$ d
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' Z4 K9 q, m, [* j
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 \/ Y* i- p7 _, v- a) c% o3 T
$ [& L% H. b4 E1 [3 N
/*等待UPP传输完毕*/
% Q$ t/ t7 i; T d7 m" h: G3 r
//i=0;
( h+ W# r: U( m5 _0 s! A6 l
//j=0;
4 _# [. B: w: `
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 e/ C0 l8 ~& \
{
6 Z6 F. U9 S( u$ q. s3 H! b
/* 测试UPP传输的同时操作普通DDR数据
0 u/ S; L, X s, v4 }7 p4 A7 j
temp
=i;
1 ]5 n( a+ V" z$ U
i++;
$ o+ h0 n& t% ]6 j5 X% F
if(i==1024)
+ S/ r/ ?' ^! F. ]' }8 u4 W: ]8 K
{
! S3 L6 e* s9 A7 p m, B0 Y
i=0;
3 T: U8 I& P8 A7 a0 h4 A" |& Y
j++;
5 g" N3 B; a0 E$ Z7 u
}
# J& g. e) f9 v0 Z' m0 J* c) S
*/
7 v# ^: j6 P- d4 ?' t
7 j/ Z% f& B1 Z% }! x7 y; Y9 c
asm(" nop");
7 l- ~% L A& r0 H2 W3 M
1 X$ \$ d" N6 s
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* z( ? \; i- s8 w8 K. T8 i3 W+ B
}
0 k/ k9 n9 _- s2 r$ Z( ~$ M4 i
# J' E- i! F5 h! l0 n
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 Z: `* H9 w2 g8 W) g8 K- }
//UARTprintf( "i=%d\n",i);
& o% Q" j, D9 j- L
//UARTprintf( "j=%d\n",j);
2 ?) H J! I5 @
UARTPuts("Data mismatch in buffers.\n",-2);
8 R: z) S) ^* {, w" P) K9 [
if (upp_interrupt_count == 2 && upp_error_count == 0)
, @* M0 S, `' H+ T( r- H
{
5 s A7 [2 [$ G3 M) }1 Z
for (i = 0; i<upp_frame_size; i++)
" z" }6 h b- g) D
{
) U) b0 G5 Z* |) w2 k7 _! n3 ~8 A# u
if (upp_buffer_a
!= upp_buffer_b
)
, {/ `1 u! q% V g6 E% @( x
{
; `& _) p5 M$ Y, w/ Y
upp_error_count++;
+ p. }: D- K! D+ J& O9 t
}
! n/ r* x7 R/ R+ n0 s! J
}
/ k) i' c( H- F1 [( a
}
4 a8 [/ _% Z" V R" a% M) y
3 w4 x* i6 n( k
/* 报告通信结果*/
D) F9 s; e- D
if(upp_error_count != 0)
, b. h$ m1 K4 I& J8 b( b! L
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: _$ |$ L: l0 O- t& \+ e1 a
else
+ }% U3 z( |9 k0 m
UARTPuts("uPP transfers complete!\n",-2);
/ }' Q S4 \3 u1 n+ `; q' I
: m! a9 K! F& v2 R
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 G, L" m X. d) s/ F
UARTGets(ch,2);
, S( V, [& O: Z! ~
UARTPuts("\n", -2);
4 A) Y; l' G) G* ?9 G# r4 U
' P$ {' C9 H) {* X' d
if(ch[0] == 'y')
8 U6 w& Y' R) y% E+ J
{
) H; [2 X" Z" M
/*打印全部读到的数据*/
9 y* l( T* ~; \1 a+ h
for(i=0; i<upp_frame_size; )
4 b. G! Z( g( L* O' J( _1 u
{
+ ?9 k0 d" Y( i
for(j=0; j<5; j++)
s: u, U* A! B
{
7 c" v% s! J Q- l8 ]% l! }3 h
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
8 h! K/ Y/ R) a) O+ B
i++;
4 }! q) J7 L6 A/ Z0 F( B% D3 U. _- @
//if(i >= 4096)
L: Y* x, L7 s5 p1 b4 _8 D
// break;
A! n. `+ f4 X1 ]3 a2 x# {$ t
/ j3 N+ N }5 I, X+ _
}
/ Y, {: G. z" L+ R% p! Z# a
UARTPuts("\n",-2);
! R y8 G1 w' I0 ]5 n1 W5 @ v
}
5 x7 h- X S2 _ [' w
}
! }9 x0 P+ b+ t" P/ i
/ E/ |" ]: h/ [. c+ f* B
}
- N2 F c; k- _$ u8 d3 F2 ^
, W0 g' B0 O/ n7 n! j- n
9 t& B" Q) }- S
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 x0 |8 b! @- x7 \1 l) |6 d
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" e- [6 R" d9 Z- @! M# W
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4