嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; g! W$ h, x5 j3 H. z# U! F: Q
Void UPP_TASK(Void)
0 L0 n2 l& K. i9 r2 ~6 F
{
- C( g: s- y! ]" f
% y+ W; ~! S/ N+ b- Y6 ~/ E* r# ~' W
int i,j,k,target_int_count=2;
. ^1 d) ?7 F7 n+ B$ c
char ch[2];
+ H5 u9 q% r, @8 z
. y- \6 _# \, T+ m9 f% n$ p5 g8 F! Q0 ~
# v; c& Y) u: s+ G3 _' d" o0 X- C4 T
2 c& m+ H) B. l# Z( k
upp_interrupt_count = 0;
: @% V" d; g3 X H6 ^; y3 y. O! F( m
upp_error_count = 0;
: f3 K+ q% p7 `) o: k
( e% \% s3 ^0 T
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; ^1 e, ^$ X+ X- q7 p# B" k, y
// Initialize data buffers
+ N _+ ]+ |8 [# W" R" E" x/ k1 ?0 ]
for (i = 0; i < upp_frame_size; i++)
' x$ T$ Z7 \& | B4 O# Y9 ~ \8 E. k
{
( U& l9 m, U ], S! u
upp_buffer_b
=i;
0 D; M% j: b/ @
upp_buffer_a
= 0xDEAD;
" ?5 I# W+ ?2 q/ N" X- m
}
( c' c3 r9 E* ^, Y2 j( e1 p, J+ X6 G
9 S. y( C2 H& u& r* ~! Z6 ^
//for(i=0;i<1024;i++)
# x5 t. Z$ G8 f
// temp
=0;
8 S& T/ g$ o( y& i+ T5 |7 G
# _/ `% l0 J C+ H7 I- c
//UPPReset();
, T6 U; L+ X( J/ ~1 \
/*启动UPP DMA传输*/
$ ?+ L n& X% }& A
UARTPuts("upp_prog_dma_i\n",-2);
6 y6 r3 a6 a0 G$ U% |; j
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 h7 A7 C# x+ |* d, k
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 D5 n6 h: v, M
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% R; p" N, p( A7 J F S2 M# }
7 f& v; m6 L0 z3 n- d( `7 Z
UARTPuts("upp_prog_dma_i\n",-2);
5 o: }, p8 D9 e: {4 u1 i+ B- A: X
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 [& O4 ]6 `& w5 ^- X
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) e3 g) v. j1 _) g9 m6 w' G# D
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
V0 X6 p4 |7 [
: N( L& ^6 S! D/ V1 v& L& ~7 f
/*等待UPP传输完毕*/
8 W# n& o) P W2 ~
//i=0;
. t; {8 ?; n# }5 {* j) Z
//j=0;
, f( L/ T$ T3 [' L9 N, ?
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 I8 | Y1 ]1 Q6 \
{
S+ e4 V# E" _6 T/ L% r3 |
/* 测试UPP传输的同时操作普通DDR数据
5 u- D3 |4 ]3 B: G* X2 G$ B9 K
temp
=i;
8 m3 |1 s9 W* E% q/ s
i++;
& S& J; g% v; ?' e7 I
if(i==1024)
9 L7 Y5 U5 h6 T/ C2 E) Y$ o
{
- S1 D; H3 ]0 b) i& ^
i=0;
: ?3 m8 c5 A F/ l! R' Y# X
j++;
/ G- ]0 z8 U, f7 i
}
7 v9 u# }1 K1 e7 ]4 x
*/
; I3 U& P% _ ~0 `1 ~
2 e6 z7 ~+ k- {; t* Q
asm(" nop");
) u5 B7 y+ X9 [3 m; e8 T
! w0 Q% d# v3 _& n+ P2 _2 }2 x
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 D8 W- s5 G' H; x, S: w
}
/ J1 E5 e1 i! E7 }4 T. }( _. U
! J; E6 v# S) V* V
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, }2 V$ F, S, K% {4 J) u
//UARTprintf( "i=%d\n",i);
+ \9 m. G9 ^1 Y9 h3 V9 \
//UARTprintf( "j=%d\n",j);
$ O; c W3 _( e& |, z
UARTPuts("Data mismatch in buffers.\n",-2);
: s( _( M* ]% w/ ^8 Q* H. U8 c
if (upp_interrupt_count == 2 && upp_error_count == 0)
; J8 v4 @; n2 j& ~
{
+ r1 b/ j" U- m; B+ j, U2 B1 l
for (i = 0; i<upp_frame_size; i++)
& t3 c- t$ E7 v. p6 D
{
4 J$ F+ g5 z4 P4 F
if (upp_buffer_a
!= upp_buffer_b
)
' x, u- u D7 I% d/ H: x) V
{
- `% _6 P/ Z1 T( J9 I
upp_error_count++;
Z; {+ U2 Y1 a: y
}
6 P3 \7 l7 D4 t3 q4 l
}
/ y9 B$ F# ]6 R3 ] |
}
- n" i8 R4 e& k7 a- I
5 F+ f2 J. @+ T# @% [5 q
/* 报告通信结果*/
* t! d0 @' `" k. k8 f" [+ S
if(upp_error_count != 0)
! T+ J* R5 c' t! g2 |# k- O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ y% X, p" K4 F* y* e# g5 d
else
$ ^) v# j. f6 @3 ?* q6 e2 j0 P
UARTPuts("uPP transfers complete!\n",-2);
' {9 X. z$ M; A/ o
: V* I, y$ R8 R) t% e
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; `. k" ?* W! S1 q4 e" T
UARTGets(ch,2);
% N: n8 w$ M$ L" w) C, m% L- k/ `
UARTPuts("\n", -2);
6 a& ^) G# W4 I
7 ?8 d7 K5 O" g3 V! ?+ ^
if(ch[0] == 'y')
" S# {2 e7 m% ?- j: h
{
, A$ D/ J# q2 v Z$ D! P7 D) D$ ~8 r
/*打印全部读到的数据*/
$ N$ x3 Z; @& t
for(i=0; i<upp_frame_size; )
: t& L( a% P+ n( R- G" n) E
{
, p: [: r+ G3 E; W5 H" Y3 c
for(j=0; j<5; j++)
2 P; s# p' v. s$ n5 D
{
# u/ U1 Y( M' |- ~
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 n# i- u8 R1 @3 R8 j1 y
i++;
8 {/ ?! M& H! \7 p' t
//if(i >= 4096)
+ X! i" S' k5 @) l
// break;
) U. u6 Y2 r. c+ @9 c5 \+ t
. g; S& Q5 \3 q5 R. X
}
8 \! |7 O! d4 k( K
UARTPuts("\n",-2);
* [4 w( K$ ?( S& x8 ^
}
/ R7 K0 c1 q1 c) v6 V& Y
}
% l: r% U" G) p
& \8 a; S/ g# f- n1 O8 U2 ?
}
3 ]% R+ L: B" x" B( y+ n0 Z
+ s7 \: _5 u/ m% O% T. o: H
6 z. v7 ~$ P( H4 L+ r6 L
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! r/ d& z- I" x! S4 O* p& }5 h
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 ]; ?$ K; S5 Y4 V+ d6 }- n
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4