嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, u% r3 a6 `8 n5 n( R+ M' ^
Void UPP_TASK(Void)
3 S& z" _# r' U' O
{
% j. h& ^3 T3 }; ?; ^
4 O6 Q! s# a1 r& t9 W
int i,j,k,target_int_count=2;
+ V' n) u+ g7 k. n
char ch[2];
. }8 g: d* O% ~
, k2 h) `0 `' c8 ?) @
; S9 q- _# u* F3 c \
' f6 S0 T7 \6 h2 d6 z: s% U& T4 I
upp_interrupt_count = 0;
: V5 \; N' T/ e- L" \. q
upp_error_count = 0;
4 k* L+ h/ V9 D5 m
4 i0 N. W' C1 `* L C! y5 K
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" u8 N; V/ h! b8 Q6 F
// Initialize data buffers
) e9 B+ a0 Q0 s5 M
for (i = 0; i < upp_frame_size; i++)
9 O4 R' g& S4 X# p' R4 L; X: K0 ~
{
0 L( L4 m5 \+ O0 d- U8 K
upp_buffer_b
=i;
# e/ U( Q# o+ j$ O1 ~+ o
upp_buffer_a
= 0xDEAD;
; {3 b O. X$ T$ h, p9 T, g
}
5 u/ w1 @0 y. W
# n; x: i# {7 o
//for(i=0;i<1024;i++)
; T" P; C0 |3 N+ u
// temp
=0;
9 m, z+ F8 \" ~ j
, q8 [ W; [8 B+ A! {' ~, u
//UPPReset();
/ A7 m( c5 _' [. H
/*启动UPP DMA传输*/
. {$ S4 V7 Q" Z4 g0 L5 W
UARTPuts("upp_prog_dma_i\n",-2);
, `( v" R2 V4 R+ o( y0 N! E- [4 r) n
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; _& `/ t; @/ X5 P4 P; j
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* n) X3 k# U- w( ^$ V3 p
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ b& G! Z/ A9 J! Q7 }5 Q4 k& ^
1 a1 J! T5 n, i( X2 l' H
UARTPuts("upp_prog_dma_i\n",-2);
0 x) \( F: W4 e" |* Z! U
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 p9 [7 X9 N' [- g- k$ p
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% ]0 T8 N& z6 k$ T
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' J; h+ h& Y. d
! e! f v. O+ L
/*等待UPP传输完毕*/
q. ?8 P* w, r3 x
//i=0;
4 X. t$ @ s4 }' |8 } \
//j=0;
6 b$ f }5 m% j9 r# z: V
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 @1 o W$ m( @( U0 w, K
{
7 W; t' B, {1 r9 P
/* 测试UPP传输的同时操作普通DDR数据
1 y5 S8 d2 K% d+ f! x# r
temp
=i;
7 B5 p5 s7 d$ ^7 {
i++;
; \5 V- h6 g# x" o
if(i==1024)
. N7 c- r" X5 k7 q
{
; S! s6 x9 C, q( y
i=0;
, ~) V I/ g% c, n. V: o: `0 w7 K H1 Q
j++;
1 D- S- \( x( [' P- t
}
) a/ t) n" }6 o( P4 i$ D5 @- M, d
*/
4 J9 l5 J" f! M7 \& ]4 H, U
- c6 j! |; A0 i8 R* ^3 A
asm(" nop");
/ C4 @/ g1 t# V% |- @2 N7 \
- b9 C" k& c4 o
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 \4 K! U' R% d) X, ?
}
, F( Z5 t$ b0 p4 C; v
; O8 `6 w# k% q. n
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. C6 j( g! c. W7 t' O8 a; }
//UARTprintf( "i=%d\n",i);
# `/ M, `: q8 ] E0 W9 ~3 P
//UARTprintf( "j=%d\n",j);
& O3 \$ ~" _/ {; l3 w" x z
UARTPuts("Data mismatch in buffers.\n",-2);
: @& d3 A* k* q" p! P- ~4 n
if (upp_interrupt_count == 2 && upp_error_count == 0)
- B1 T; d: Y, [$ E) z( y
{
" X" Y) `4 X' W4 i/ j
for (i = 0; i<upp_frame_size; i++)
% ?2 v/ H: w8 P0 E, @' W
{
4 n* Z+ l: h1 V; y
if (upp_buffer_a
!= upp_buffer_b
)
2 Z! Y+ C( b5 a0 P
{
( \3 J; H% j7 R9 j/ M
upp_error_count++;
: M* _ f6 q+ k/ [3 n7 J8 I
}
3 ~( w4 }( r/ u2 h# D* x. r: Z) }3 X4 |
}
/ x0 ^4 y1 V. W
}
9 t4 a1 P' O2 ?5 m' h
% M& Y2 t0 j, I* I ]9 ~
/* 报告通信结果*/
$ a4 v. Q: q& T) Y7 Z
if(upp_error_count != 0)
5 `4 }' C& A* R9 e* A; K
UARTprintf( "upp_error_count=%d\n",upp_error_count);
, T9 ^0 ^' w. ?( d( \0 m
else
: H+ v7 ^; k2 o
UARTPuts("uPP transfers complete!\n",-2);
- O/ v/ }+ v' B0 |4 }/ y% o' M
/ @9 R u; e' E1 F# `& {
UARTPuts("Do you want to print all the data?(y/n) ",-2);
. E$ {' A1 q$ \$ N. q; c7 \4 ]# k% @
UARTGets(ch,2);
8 k" W k7 h: v) v$ n1 t2 t
UARTPuts("\n", -2);
6 |3 I- q& H) k
- E. U: e9 k4 y
if(ch[0] == 'y')
. S% v0 G+ {5 _ Y
{
1 d3 i# o' f( [' K- p
/*打印全部读到的数据*/
# y, ^+ y8 p3 n& z
for(i=0; i<upp_frame_size; )
% I6 H2 {8 ^- D" ?, S) {
{
5 m9 s; g, c9 ]9 S. q3 _2 d# ?6 U
for(j=0; j<5; j++)
$ y; `. N- q2 t: j% b- }9 ?6 |
{
2 h# ^ B' ~; r. v
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' K8 F9 Q/ h e; w2 i
i++;
* z8 O; L* B6 ~! P
//if(i >= 4096)
; l$ [2 ?8 h D0 H2 s5 |( W
// break;
7 U1 B R8 f& U% ^4 s) K4 B
5 h* r8 o! r2 I
}
0 u3 U* J# Z, [' { U
UARTPuts("\n",-2);
7 o, e3 W4 ~; t
}
/ E' W9 d6 X+ ]9 a
}
; s) D8 F9 `, P% ~
6 R5 g- ?7 i1 j% ~! J4 S: R
}
6 x5 S, ` G7 P0 s
& E3 g) O5 f9 u$ W
( E- C0 d& a% K. N% L6 X M0 } {
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& h n" e0 d- Z4 q5 P# Y5 x! i
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ z8 W& y8 e+ u+ n& E
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4