嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' P0 S4 ?. i5 Y+ V5 q
Void UPP_TASK(Void)
3 n4 j+ M) b4 ?7 k [) I
{
: V# Q( ^7 ?4 n7 x/ a6 {. S8 _( I
" P8 r. o5 g6 {( I
int i,j,k,target_int_count=2;
! V( ~3 D7 p9 t2 W k( {
char ch[2];
# k1 o5 j8 m: \! u, S* z* M
6 P t: s3 q; E+ ?0 f
6 k& Y8 B/ J# N \) ?0 `
) C" N1 o7 N G3 Z" g
upp_interrupt_count = 0;
' f: d1 Z7 _' ]* Y- m
upp_error_count = 0;
' \' @! l% x( U- v
- Q9 |3 z4 i3 F" Z3 C* U
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; j$ J! n0 s. C( [
// Initialize data buffers
, F* [6 t8 v. E' l' h: Y$ m
for (i = 0; i < upp_frame_size; i++)
9 S! s3 {" ^: ?4 a
{
" l. b- E! G4 R% V) o7 J2 x
upp_buffer_b
=i;
, ]! h, S- G i3 O! Q/ o
upp_buffer_a
= 0xDEAD;
+ h7 V( m' Y! M" ]5 @7 H [
}
) \) {/ R( [4 h# y( I1 ?8 ]
! e3 g0 f9 Q; r. n3 |; F
//for(i=0;i<1024;i++)
+ H! `/ Y* |# g+ c i4 O; F }
// temp
=0;
( s1 r7 m6 @* q* i/ b
, J# M8 h3 r- Q1 h: m
//UPPReset();
. ~* }: m5 ^6 v/ ]( F
/*启动UPP DMA传输*/
- i! `" I7 D8 H5 ?! l2 h
UARTPuts("upp_prog_dma_i\n",-2);
4 y5 N x3 t, C$ a8 p8 S7 p w
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' U& j' `3 ^8 `+ E' i; r2 ~7 G, o
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 D! t% V3 _; a
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; m2 D) u3 ~9 y0 B& @" B- y, U# z/ v1 p
% j: Z& y. c* q$ c2 A. z( f: e) x
UARTPuts("upp_prog_dma_i\n",-2);
, _' i: P% u5 w. Q# o; z+ V) z
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: V5 \* Q b& }+ h! I
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( f# q. Q5 b6 w# ]
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- _2 ~2 D* k: I& S
! e' w6 i1 U# i5 m t4 t! P
/*等待UPP传输完毕*/
7 [. c8 W/ C9 m7 e3 X# \! ^
//i=0;
1 y' ~4 ?8 W: n6 d4 L8 ~. @
//j=0;
3 I3 f. q; l6 L# |" }
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ l7 ~; j, u; }2 F
{
, P# k7 F: {5 V
/* 测试UPP传输的同时操作普通DDR数据
) p4 G: K3 _5 R
temp
=i;
, o1 H) T! M: s6 [# `( O' O) _! s
i++;
) W j3 i! K$ O
if(i==1024)
2 w( T/ V* f. X: P& _8 s+ T" m2 A' ]
{
3 Y% e$ c1 I6 P
i=0;
- T, S5 @0 [. M5 M8 |) D
j++;
% F1 A/ D9 E. U( s- u
}
' i7 L6 h7 r+ r7 e+ Z1 P; h
*/
9 m7 ?: N9 A5 p! R4 M+ A' V
' P6 i4 z) p2 w9 E" v) s/ b
asm(" nop");
3 l8 M# u! Q) w7 d
' D! }2 c0 N* l: a& o& {$ H: @
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 c9 j* D7 \$ J7 j8 i- q) c
}
2 h$ X+ N1 m% e+ X/ O7 s
/ a8 c4 @: W( e2 ? X; J
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" @+ n9 n& t) T4 s: Q$ s& D
//UARTprintf( "i=%d\n",i);
; N, m8 g5 @) c
//UARTprintf( "j=%d\n",j);
9 D' F- t9 h B6 m2 ?
UARTPuts("Data mismatch in buffers.\n",-2);
! g2 b2 u; t; h: u
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 ] `' B3 A# I y$ g, U
{
7 r+ c% n5 y9 y) K8 s
for (i = 0; i<upp_frame_size; i++)
: w0 L! n* P) g3 E v( ~* n
{
0 y8 P. W, z/ y
if (upp_buffer_a
!= upp_buffer_b
)
9 J" `, [% o: b% V) a
{
6 r3 z( [" L! a& e" F2 v& q
upp_error_count++;
( Y" l, O5 @* m G
}
) Q1 e0 G* o( I4 r1 w7 c. y
}
6 v/ r1 c& L. ]5 Q' i E
}
, w" x( G; y" n& ^
( R9 r, a. a; F7 a/ O1 s6 g* b
/* 报告通信结果*/
3 S" j, p, {9 j y |& Q
if(upp_error_count != 0)
+ }7 m: y4 p. e0 i
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( s. F7 E% s+ J* E6 |# B X
else
( d* f( V/ S) k2 ^4 S& Y4 n' D
UARTPuts("uPP transfers complete!\n",-2);
# ?; r8 N; h% v: S
- ]3 F! f) j B) O, V
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ ]5 x: d! U1 z7 ~- _4 \
UARTGets(ch,2);
' _8 v2 q6 {" M1 K5 f3 u* h
UARTPuts("\n", -2);
: T& D% U4 ~7 p5 P9 o L+ z3 p
, V* t' d# o7 [: v& C8 F
if(ch[0] == 'y')
% ^ |9 b7 i' g- b; }2 a
{
# c+ T+ r( K# S- l
/*打印全部读到的数据*/
[* H+ K7 f7 e4 _. ~7 Z6 G
for(i=0; i<upp_frame_size; )
* X. y! Q' |& d
{
' k5 b( D, s: q: @# Y2 ^0 t
for(j=0; j<5; j++)
$ t$ g6 j( I/ c0 H. U- S6 g
{
, e" c Q* h+ c5 V
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# E: K, _+ R/ M1 U6 M' q' O2 n' w
i++;
* [# Q% {2 s/ P1 D; G7 \+ p- q ^! G: k1 y
//if(i >= 4096)
5 P3 e# S0 X; U0 Q( k
// break;
0 ^# F) m1 r+ I B0 r
* n1 w0 q9 U$ Y* c5 c
}
4 E8 J9 e5 G5 U7 z7 f
UARTPuts("\n",-2);
5 U% ~9 q# f* v' i* k1 s5 h
}
) x/ b* K; l( E" h# Y
}
$ l# r9 A" k% Q: S+ n$ q" D
/ n) x0 u+ Y c
}
4 U+ J6 L" b* ~4 {
* v9 k2 w0 U" z1 [
: H' N4 Z% D; p7 U8 l' v" \
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 A, m2 B: Q: ]
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; |! w5 c4 C/ L- k$ y+ d0 A
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4