嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* J5 a( Y. u+ Z0 ?! t
Void UPP_TASK(Void)
9 [6 a9 u" v/ ^0 G1 A( \
{
" a. Q' T8 q; ~1 M" L" \8 p+ F u
2 X5 I# S, E8 u; C+ K& ?: `
int i,j,k,target_int_count=2;
' I& N! b0 c) |7 i2 F* C5 J8 I; ~
char ch[2];
9 a+ T, B5 m. {9 ]
( Z% }% @: h- H( ~8 M8 x7 k
% R5 ? S n4 _$ d q
% f7 H# B; E, G' v& I( w$ s$ A* n2 k
upp_interrupt_count = 0;
2 h5 N/ f( L9 D
upp_error_count = 0;
8 ?7 Y4 c7 P' R! {# L# s
' L% W* Z, X0 j+ U1 |
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: j2 h4 b0 s1 }. ?9 q7 z t& J/ F
// Initialize data buffers
" V# Z: U( u r7 a1 c
for (i = 0; i < upp_frame_size; i++)
6 F5 C- o$ {; ?2 g8 W' T3 I6 v
{
! n, V! o" S4 i8 ^1 S* N7 {
upp_buffer_b
=i;
* j5 M( L( H2 g* Y( u5 ]
upp_buffer_a
= 0xDEAD;
+ X) `4 U; {/ E0 I. [
}
0 k9 A4 r8 x) W9 b7 t
1 n2 K# Z ~4 X* f
//for(i=0;i<1024;i++)
% Z6 E5 N* ~) {
// temp
=0;
/ S4 u$ |9 E6 N8 X0 S" H
2 Y3 ]) J9 V ?9 {$ {+ T" w
//UPPReset();
: C$ r. p& A! H/ A* b! W; K! |
/*启动UPP DMA传输*/
, S' ]. ]6 q- I6 f8 b2 V* e
UARTPuts("upp_prog_dma_i\n",-2);
1 ^) \ ]$ E: @2 K( z
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* G2 d+ T x, Z f o
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. u$ x5 s9 Y6 H/ ^+ f, m! R2 o2 x$ G
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 v6 s" h) | r# @+ O6 O2 o
" ~4 \, e' }7 K( ?! T, ]
UARTPuts("upp_prog_dma_i\n",-2);
: z j( u. R3 L- c2 T, P* l/ X9 p7 I
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 ?) Q7 Q9 W$ p2 }1 s/ a
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 A& @: m' f5 g9 k) B
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 u# c- }5 U) F$ _6 V4 f
0 B/ L7 K) I! _( @: R- m; S
/*等待UPP传输完毕*/
: Q% V* D' _2 Z5 ^) ~
//i=0;
5 |* |0 v8 t# X9 c. J# r' G
//j=0;
; [' R1 s8 M% I
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 V! u3 P9 ~ X- {3 D
{
# a! X7 q1 d( X+ O
/* 测试UPP传输的同时操作普通DDR数据
5 v, a- a4 {& o! X. L) `% H5 l* A' o
temp
=i;
1 U/ Y& E$ E$ F
i++;
& v: R6 Y% u" @4 e1 m/ H$ I* c% b
if(i==1024)
# U/ [1 L# p; K0 O6 [5 D: q
{
( k# E D& Y' R( }- ~5 M& T
i=0;
" l6 b! P5 i( [* `- Y
j++;
" @+ l1 g$ P) d! O7 g+ J
}
4 N/ j' w6 E0 s1 r- M0 t) A) ]
*/
% L3 {9 ~- A9 K, Z
/ i3 U( Y6 v- M/ P: E. Z( H2 F
asm(" nop");
8 d5 R3 g; z" G7 Z" d% E! i/ [6 X
- N" J3 ~* U7 D$ h7 k8 ^
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 J) L; D8 _! d6 F: H4 r
}
|) K! e( _4 f: ]$ L. ^& q
) `4 V4 T; _( f! N$ D3 }2 t, E
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 R0 w: H& ~1 B( i
//UARTprintf( "i=%d\n",i);
+ A8 ]0 g$ m# i7 c4 }* I' O7 `1 Z
//UARTprintf( "j=%d\n",j);
* l; D7 a, Q2 |6 _
UARTPuts("Data mismatch in buffers.\n",-2);
! \# A2 P. j+ N7 y
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 x( t; X2 S7 p6 f: s) |
{
3 ~7 L" G' |7 E& _- Y
for (i = 0; i<upp_frame_size; i++)
4 [" v+ `0 @% @: Q6 I5 u' b
{
/ a" b z# B9 M; W+ Y* m' W
if (upp_buffer_a
!= upp_buffer_b
)
7 |' g% F+ ]% f4 B5 D3 H5 m
{
! X% }, j; q, V
upp_error_count++;
6 w5 n: j! B1 E9 c' t1 }
}
j- t; T1 l& a6 \& [+ H
}
; t/ Z, H! \2 r. z( l
}
Y2 l9 h) M1 j, I) O' g
+ Z; C! x ~2 ^7 h8 K+ I
/* 报告通信结果*/
9 y0 K1 Z/ z3 w; @* [4 b9 D
if(upp_error_count != 0)
5 m$ _+ \# U- g+ p4 _5 @9 X- p
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 s" u; T ?) Q0 Q* P4 R
else
6 r9 \; p S: Y5 j' }
UARTPuts("uPP transfers complete!\n",-2);
0 S3 E6 L. C6 e
% }; N7 [) J/ H3 [' v0 X5 o
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 J7 l0 t* R# `& L
UARTGets(ch,2);
' q: x; _' L/ N$ k7 y
UARTPuts("\n", -2);
2 R$ p, @( ?" ?9 H3 A8 v& j
7 e6 p# W" _! T7 n. D' y+ b% D* [$ G
if(ch[0] == 'y')
% X0 U5 L3 g& h; J
{
5 {4 F' F+ J) F; d
/*打印全部读到的数据*/
: u; l: x: _& P! j8 y3 T( A H
for(i=0; i<upp_frame_size; )
* N ?3 H$ [, r- c& W: G% P1 U6 j
{
) {. p1 |6 T# `# K) F5 j4 m& z2 p
for(j=0; j<5; j++)
! E; B* h3 O0 `7 J, R7 ~& w
{
; h, J% A# \: @- x6 q
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 P1 a4 C0 c" x7 c" [
i++;
* ^5 D6 L& |2 _9 ^5 i
//if(i >= 4096)
K( a! |" @ H# J" h5 I& `
// break;
" `6 f' A# c, B5 n$ B
$ J% F- P( I% b! N, Z
}
$ N9 e: X, P9 Z) @( X* o7 u
UARTPuts("\n",-2);
$ J3 s* y: f8 [9 J
}
- T1 V. u5 O( }7 M0 L' u
}
8 [! W8 q' L( x/ O
* F! Z. v8 X; x
}
- {% r( \5 L9 h' h- b0 V
~ m. e. b2 j1 R$ p& S
0 a0 P" J3 G1 Q/ c% i4 s
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 [) b3 a. O r' s0 o H! W
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 j4 Q* Y: B$ L% h A
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4