嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 L2 u- ?- }, s9 T( w. I
Void UPP_TASK(Void)
4 l" Z2 M4 ^$ w+ W
{
/ ^1 B% O$ F- V& s0 }2 e# U: w
: x8 ^# T1 S9 Z7 D* I2 i$ ^) r
int i,j,k,target_int_count=2;
$ M' ~" q' {2 h" `' L, ~% n7 H5 V; E
char ch[2];
2 e* o L& h/ Z) C
1 W1 E! x" K9 \- H1 a: |; I# l
: \. e4 f9 t g3 A2 I8 ~
4 N! @8 p9 C3 o: S2 z) H( s, M
upp_interrupt_count = 0;
, I3 Z R; j5 H; U* i. b7 `: f
upp_error_count = 0;
' a& s8 `# H9 R* m, k% R! F% G
0 c4 `$ F* H) V+ W# v
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" w+ }, T: g4 `% S
// Initialize data buffers
1 Y C) Q# F: S& A/ t0 u
for (i = 0; i < upp_frame_size; i++)
# o" {/ E0 n$ ~: p: u. [
{
) ?' N; [! t8 _- c) k- I
upp_buffer_b
=i;
v+ [2 a% B/ w2 z3 h
upp_buffer_a
= 0xDEAD;
7 e2 D! H4 g+ d0 o$ X/ d
}
2 T4 D. t2 e8 e8 @' e
9 D2 x8 W1 X) n& K: y
//for(i=0;i<1024;i++)
( I5 K2 Q- O `: W0 t2 L% x6 W
// temp
=0;
& ^ p9 N% r9 f5 o+ t
: ~7 a& S! w) Q% t, t$ p
//UPPReset();
# A: B- K/ c; r
/*启动UPP DMA传输*/
) M0 S6 u8 R$ b U( R
UARTPuts("upp_prog_dma_i\n",-2);
1 Y- M* k0 y1 N& }
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. x, W: N8 A; @
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% i% [# @5 ] o& B
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 j1 V1 y! H$ l' h9 u
5 E( U3 P! M1 }# \( O! v
UARTPuts("upp_prog_dma_i\n",-2);
6 }* `0 s+ X2 c$ U. s
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 a- \ i4 k( A: ]/ o# h7 |0 W
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* B! J7 a' R9 b
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' w5 A- X1 I& H- M
* D2 I. n" h+ b f9 z
/*等待UPP传输完毕*/
W# h5 z3 j$ i% `0 [2 N$ q! X
//i=0;
. L" Z5 R9 T! m/ {: Z( X
//j=0;
7 m- K2 E4 }) B# @
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 G, ]3 X0 X2 a4 u% R$ K1 w5 f
{
' h! i5 R% m2 w; i
/* 测试UPP传输的同时操作普通DDR数据
" ~) P7 _2 p: W* k
temp
=i;
$ {# H. ~; {6 ^7 ?2 _7 a& O" z; b+ \
i++;
% }* k& d" R( |+ v# ^( X" P) D
if(i==1024)
4 Y, R3 s5 F$ g1 u7 w" D5 A* [
{
9 ?' B) K8 h8 Z1 C- K0 o
i=0;
- Q' t% G- z! @' W2 J
j++;
; L$ i/ Z; i1 B8 p6 D. z
}
( W- M. o) M$ ?4 B$ s
*/
4 ?% A! M' f- z, P
0 p! r6 z* c1 c% B) z0 }8 J
asm(" nop");
/ I( s/ \! X( ?, U3 q
; h- n% A$ J4 F# C! _' B8 z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 A# X2 G* K$ ?9 @" T2 K$ ]; }- ?
}
0 Q/ f- N8 p$ @9 |% T4 W; u
" ?5 \ X) P. V. h8 I
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( ]/ N6 G" \* ?* E; c
//UARTprintf( "i=%d\n",i);
" r/ T# L2 _0 s6 @+ n4 z+ ]
//UARTprintf( "j=%d\n",j);
! I$ c& x8 b5 [" w- _
UARTPuts("Data mismatch in buffers.\n",-2);
& R3 O9 {3 K4 B: J7 I
if (upp_interrupt_count == 2 && upp_error_count == 0)
" Q; \" Y' O6 r
{
3 T! I0 z) V7 f3 n: y9 X- `
for (i = 0; i<upp_frame_size; i++)
$ I4 ?0 O4 b& ^$ F
{
# Y2 e2 \" d/ G/ y a
if (upp_buffer_a
!= upp_buffer_b
)
7 d6 |( E, ?* u' Q$ }9 d% [1 V
{
: Z9 }6 b/ d+ r* n$ _! a1 q
upp_error_count++;
`3 `( ?' |3 U3 y
}
1 [! I( Z# u9 R/ b: c
}
# v$ @$ b) W/ k9 j: o- W5 f
}
8 M( J0 q6 v+ \: k
9 y. ?- n0 b: T% X- b m
/* 报告通信结果*/
~$ x$ T9 f8 i! Y9 Z1 {- E
if(upp_error_count != 0)
0 L) P, ?6 L, m x/ T1 h1 C
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ w& l" ?2 I/ v# Z) G
else
# W/ h, `+ h$ }; \ [* Q3 J
UARTPuts("uPP transfers complete!\n",-2);
* Z) I: p* r8 T7 }8 x2 p5 C( b
$ l( i# m1 E7 a6 H2 i, E D* b
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& I9 f9 H7 i. O" ^; Q$ V
UARTGets(ch,2);
0 E/ t! T* V" L& ]3 A
UARTPuts("\n", -2);
0 h+ w, K" a9 E, t3 X
$ v7 `) w# e! V1 e8 u+ `& x- `! t
if(ch[0] == 'y')
B- s8 |! T5 m% N
{
; B3 e- x! D9 B" l- `, V: [
/*打印全部读到的数据*/
" F: N2 g# N* q
for(i=0; i<upp_frame_size; )
5 V7 ~# I B' g1 d0 A9 ~1 D2 s# @& F
{
9 x5 B w5 s0 b1 v! Z! I
for(j=0; j<5; j++)
! |8 p! [3 M- z& ?
{
5 y4 s- W: C3 W: x
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* Q# Y! Q: X+ x$ b
i++;
! f9 y4 r( @& { a& P+ q4 j) G
//if(i >= 4096)
) Z4 r: F+ }' W% E* v) O9 p& r1 g
// break;
; R$ O2 s: o9 N- J r7 W6 @% h2 K
0 T L$ e6 f( p9 |5 m
}
5 F0 J" v; f& D( r$ b
UARTPuts("\n",-2);
# K, Z# w0 e+ [9 b! U% d3 Z
}
* ~) S* d/ j8 p& b
}
) x# d8 A0 _! H% @
4 M6 Z% a& R0 |& a% F. Q
}
3 h# _+ B( V* z& l4 X
# z; `4 I: q: g2 l( ^) k: A
( l6 n/ \- b! }" R( l
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 j% P" `1 i% i G2 K. h7 i
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% W5 M) _- j' P' V
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4