嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 P* V4 ]1 G" S( p$ P2 v6 e9 _
Void UPP_TASK(Void)
; U7 o1 V( y L6 Y3 g1 D: W
{
3 Z& O ]# t- x) [: Q7 [' W- I
' e' Q/ g5 x; s1 `
int i,j,k,target_int_count=2;
: L% r% ~' y; A' S2 `
char ch[2];
% o' D. I/ }" [* \: _4 Z
3 F2 b3 i5 X6 M8 V1 ?
+ g, C( v7 L% T
* t/ W; _: Z7 x7 S5 y) u
upp_interrupt_count = 0;
# p& u3 L' \9 t( Z$ S8 y Z
upp_error_count = 0;
1 |2 ]9 i; S7 O4 Q, L9 W; l
% B3 x4 f k2 H$ l+ q- f7 H
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% c$ B% l3 w! @# T& x/ V( D
// Initialize data buffers
1 T, p" g' ]1 H& z/ w
for (i = 0; i < upp_frame_size; i++)
& z0 J$ n) g8 O9 D: {& A
{
" J2 Q5 n: W, D. W
upp_buffer_b
=i;
4 K* G. n, r+ D9 D0 _
upp_buffer_a
= 0xDEAD;
6 [6 x& v6 r4 x3 {+ [0 H8 g
}
; o! v/ C3 n; l) W1 l: A
9 T1 i% J/ L- D( G! q8 R
//for(i=0;i<1024;i++)
$ f% s, J$ f( L( B2 t' e* y
// temp
=0;
+ U2 S( C- S% M6 o5 r9 |
3 c) w3 a1 k$ K! D9 M5 @) p2 \, J* Y# }
//UPPReset();
g0 Q0 }7 z* p$ ?
/*启动UPP DMA传输*/
; B& S/ ]5 A! ?+ x, V; [
UARTPuts("upp_prog_dma_i\n",-2);
; M3 }" W# e+ m4 d! _1 J
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- I( J' V4 @: B
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) L$ q5 i) k3 w& A
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 r8 R, `+ u6 b7 S0 V
7 h9 L9 H3 Q! y5 A h
UARTPuts("upp_prog_dma_i\n",-2);
: q6 u- U3 |; Y- M
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* g9 v: ^+ h l) C
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 B/ s' |$ \% N. R! l3 v" N% L
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 [8 q9 y' }; U! c [, G" u% D: }
5 G. b) V: E0 W0 a) u3 H
/*等待UPP传输完毕*/
2 I+ D, z) U8 V$ {0 t. E5 m
//i=0;
4 S6 Z1 ^ ?+ V( _ z. b( K# R
//j=0;
7 f, P3 Q/ ?; C6 B2 J
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- s/ W# Q% F, m* Y
{
/ H3 C: S" b- \% n: z \$ \0 l
/* 测试UPP传输的同时操作普通DDR数据
% B: l) Z1 Y3 T" p' ?0 z! D9 |) [
temp
=i;
* c; v3 B/ U+ q; Z0 o
i++;
0 {* N: x6 X+ n
if(i==1024)
3 B: M5 \+ ]1 G( t
{
8 T' e6 [, P" j; s) f
i=0;
# P# b6 W( r1 W; B$ z) o4 r
j++;
0 w3 L$ D5 _% t& w% _* J" [
}
+ {0 @/ Z ^5 F) c Y
*/
. i+ Y. o1 ^- ?- p
$ o# q) X9 ^- b2 v
asm(" nop");
% X' H7 N+ o6 w; A8 S# n& v+ q
# ^/ Q7 o- J j
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, N* {# n5 S. W! E7 ~( u! R
}
% _. R6 U) x# z, ^. a8 {6 O( j5 }
+ }1 U9 J. ~/ Q, d2 g, l" w
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 L" v' e- |8 S3 r; S
//UARTprintf( "i=%d\n",i);
, L2 j& R3 h: V$ z
//UARTprintf( "j=%d\n",j);
$ S$ t R: v% m, h( g& o) N
UARTPuts("Data mismatch in buffers.\n",-2);
$ V e0 _+ g/ \
if (upp_interrupt_count == 2 && upp_error_count == 0)
% c$ B. S) }: }% i, F' U; G
{
' N6 H! x5 Y# O5 `% Q
for (i = 0; i<upp_frame_size; i++)
/ n4 s1 X3 b2 u1 s% @3 a
{
4 r+ U. ?0 H( P& ]6 i( O% \9 {
if (upp_buffer_a
!= upp_buffer_b
)
; H$ d- ?: T3 y$ g
{
# k* d: Z! F7 W) Z3 ]
upp_error_count++;
5 V3 g6 d w5 d: k! w' ~
}
0 C N( s: H3 n% o
}
. D( G+ z$ \5 {% B
}
) g- [7 x$ J, u4 o5 q$ ~
6 l$ u2 ~1 K9 c2 s' u' w2 |/ y
/* 报告通信结果*/
- o5 z" t" o0 E9 y5 c2 g5 s1 R
if(upp_error_count != 0)
8 Q' o" ~6 t+ k7 r/ \: a! H7 N1 b
UARTprintf( "upp_error_count=%d\n",upp_error_count);
M" L4 X8 i5 o9 H
else
5 S; n7 _" w# i' v& G9 ?( z* `
UARTPuts("uPP transfers complete!\n",-2);
& c% _' n' J2 S
& H' j y+ h" V& _2 F4 h' N
UARTPuts("Do you want to print all the data?(y/n) ",-2);
$ ]1 h/ A6 S4 P# d
UARTGets(ch,2);
7 v: K! k1 z$ J* `7 o
UARTPuts("\n", -2);
8 i8 ]/ D7 h8 Q
4 e% W# p5 [8 g- z
if(ch[0] == 'y')
, g- ^) B# s$ R
{
# l/ }- }; s3 O8 m" G! e$ b2 V
/*打印全部读到的数据*/
- e8 c. K+ i4 Q* L# I8 p4 G7 ~
for(i=0; i<upp_frame_size; )
& |- }" W2 \4 P5 C
{
$ M& K7 e' m4 ]% X: n" L
for(j=0; j<5; j++)
% A+ s: J8 g0 h5 d
{
8 }; z$ x( I, w
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 ]0 [2 c! w5 J7 N
i++;
* b) V3 A4 G1 N
//if(i >= 4096)
+ N4 M/ ~5 c" u0 I8 C0 G2 x
// break;
" d' m. P$ b% e+ D4 S* B; D( E
: W5 P( N: {/ M0 M, j/ e
}
6 w& _+ |0 n6 z7 L) ~* Y) v i, l
UARTPuts("\n",-2);
1 e5 E" @' a) d. g* [6 J* S
}
$ E- c$ M, _ ^
}
* y1 `8 \, c. l% Y* Z [/ I4 z# y7 I
" X$ `. k% n2 i- Q q& r4 s6 P
}
% ]0 B: r* J3 I! [! ^+ o
7 N# k' t$ [/ u; [, l6 w" j5 s
+ ]9 H, a3 J# V, Q; P- {7 M1 S
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) W1 s) V9 Z) @5 p0 @! B3 R- V
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! S, S" J* |9 @5 u
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4