嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& a* e; N7 L4 q4 v: S- U6 C9 e
Void UPP_TASK(Void)
4 l; G9 C5 \5 o/ e, a, A
{
# e, y. X$ l1 f$ ]: v6 B
9 T" | M: ^2 d6 |+ z! A
int i,j,k,target_int_count=2;
3 z' r6 |6 x" q# @# m% f
char ch[2];
2 |& Z* O+ B# w! W4 n& w. o
& @5 A! Y) g8 @$ H. B
7 b7 V% D: r* j& N" w. @3 n
' D3 l; k, F) | ?( u7 M
upp_interrupt_count = 0;
; E& N% _+ ^& V9 u& J) q5 l" U
upp_error_count = 0;
* Q, O: l6 f" M9 S$ G
; \* `9 V' [$ l) @) |
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: E/ G! i+ Y( V' A/ s& k: _
// Initialize data buffers
: K! e0 }, R, m) A7 G8 v. i8 D
for (i = 0; i < upp_frame_size; i++)
" w9 W/ Q6 H) l" y
{
7 l1 k, ^5 H+ }7 W' N2 G
upp_buffer_b
=i;
: @, b$ E* M8 s' n
upp_buffer_a
= 0xDEAD;
6 `2 {5 x9 A7 n8 A( W& c
}
/ ~9 F3 A0 u: ?( _8 T1 C
& J, [/ L! e9 v# h: R- E
//for(i=0;i<1024;i++)
) M- A: p1 o1 o/ R1 }% V. z
// temp
=0;
+ |* {3 b- S: K/ Q
) N0 p4 n$ @- F- p
//UPPReset();
" R; S: o* [& q2 V4 h6 {+ T
/*启动UPP DMA传输*/
: b4 y7 q3 A D% s% u0 p( A# l2 C
UARTPuts("upp_prog_dma_i\n",-2);
, S6 B" U% L8 H/ K5 |
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( u' x9 k- y! o& t! k* ~) A
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 S# }0 m! {" S8 \# ~
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. @& r+ t" ?! w7 d& P8 ~% s
0 j* T/ {0 w! j* l/ |1 y; X& X, E! }
UARTPuts("upp_prog_dma_i\n",-2);
/ ~# a& o9 J; f$ n0 g7 d, I
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. B3 B7 U' h4 Y: T+ _: @+ y
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) Z5 y2 t2 i, s/ N S% \
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 _$ ]% \, M) U! l0 _+ @6 c7 ]$ {: l
& k3 c" n! ^) ^" F' K0 |
/*等待UPP传输完毕*/
# }( ?/ I2 I) K6 y5 a! O2 n
//i=0;
1 u7 W b" ]0 G) Z( r
//j=0;
$ K! R+ f. V* s% L
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
z3 v) B1 A# z4 X
{
3 E) [' O- i6 F% C# o% D/ q5 c7 g
/* 测试UPP传输的同时操作普通DDR数据
- n- h4 i, \! {# G
temp
=i;
, l/ n; n/ b- ]% d0 y
i++;
" M) E9 a, n$ B+ Y5 {$ h
if(i==1024)
" y) }) C' S6 X* [# H0 ^
{
2 N/ Q5 p0 @! z9 J# I4 q; c6 r8 Y
i=0;
2 |8 p, f% D1 V" N+ j& ^4 b
j++;
: T: k" T. K+ T8 |" F
}
- N2 U" i H: V* h4 _
*/
/ X; r! A8 ?4 Y
% x) a. T5 K% w- ]
asm(" nop");
+ ^+ I3 F" M, u+ O
" F' A1 n: @+ Q, H3 r# J
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% z. l/ J" a F0 z9 L3 g F3 i6 e
}
2 S. A# e9 z/ `& ^4 p" v
5 R+ c0 B t# E" \- N' |
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* H: w$ X9 @. |( [ B5 j. X: L
//UARTprintf( "i=%d\n",i);
7 v% u! F# W# V4 k
//UARTprintf( "j=%d\n",j);
/ c' X, C$ M `9 O
UARTPuts("Data mismatch in buffers.\n",-2);
! H" ^: l9 |2 i. E# ^
if (upp_interrupt_count == 2 && upp_error_count == 0)
& w1 p5 D: C* u5 ~
{
' h: Q7 o! B5 w: _* @+ A5 j' Q& M9 R: o+ S
for (i = 0; i<upp_frame_size; i++)
* i+ y1 c2 N) W: f
{
1 }& B: N' z- i, h6 b; P& O
if (upp_buffer_a
!= upp_buffer_b
)
: g9 `9 B0 e- N8 y
{
, d7 S; N6 |/ C5 Z' B/ h0 J' L
upp_error_count++;
, S g1 L0 n& a3 @
}
+ }% g' D0 g2 g+ v! n0 H: G! R
}
2 t4 J! I% T1 k
}
5 X" a3 ~- H$ j7 L1 X
3 a& u* t$ K, P9 s+ e
/* 报告通信结果*/
; ^" u& `4 B/ V4 `# ~# D% D' A
if(upp_error_count != 0)
6 U; D4 y% O% _4 O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. C, I) s9 N+ Z: A4 ?; [# T% x: h
else
* e" `% s7 e: |# L F* t
UARTPuts("uPP transfers complete!\n",-2);
3 u$ e) R: X! y1 e5 \5 G9 ^
) V$ c3 v1 Q1 m
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 y5 {% q) q$ ?' w. o' h
UARTGets(ch,2);
, \: V, W6 f# c; w
UARTPuts("\n", -2);
# _3 ?4 u; a& i! l$ _+ G: J6 B
4 E/ ?8 W/ {( }: u& M
if(ch[0] == 'y')
$ Y& t, l! r$ Q2 x8 S! ~# K4 b
{
: Q" L7 [6 E& T, u# w) a
/*打印全部读到的数据*/
: X7 R0 d: z1 q j' f3 E
for(i=0; i<upp_frame_size; )
1 }9 A4 d {" |1 S" R
{
$ [0 o- r) r' z/ t3 d
for(j=0; j<5; j++)
! _2 m9 F; x% T
{
0 e% }1 j' Z& v4 ^; s* w
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# f4 }: Y5 u& O. |. ]: s3 s- H
i++;
e2 q9 p$ U4 {+ r3 E9 V; P
//if(i >= 4096)
+ V, o; S- C. h# Q
// break;
( y0 W! N# d6 L" H
1 K- K `1 r8 m( K/ [; o
}
d1 i- p2 M& b4 l. E% ~3 X
UARTPuts("\n",-2);
* R" a. M/ n5 X2 [8 b [
}
% B" g5 u- F, D3 v5 F5 {! v& a
}
' C* e2 s6 H1 U: D" V
% a- ] Q0 g1 y0 i/ a8 E9 n5 {' z* {. m
}
/ d3 P* @5 F4 g2 h
9 A; v# o1 j. n, i. I6 @) r
) s/ i _; O" T. [+ ?2 P
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 ?1 ?5 j1 s' H: c
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- `8 P4 T$ H, q; r9 B' x
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4