嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* `; v! x5 N; F d9 a
Void UPP_TASK(Void)
: D5 e r9 x1 p
{
, t5 R1 J: ^ K7 b2 p
" u! C0 K& x0 U5 h; b5 O% _: T
int i,j,k,target_int_count=2;
: S# m, D# A, o7 k1 _2 S' g- k% @) K
char ch[2];
# x6 C1 S6 t3 j- r
5 b- B1 ?6 ~5 e* j X- M
) [0 L. B/ {; P3 r1 L
; b4 r! T6 z2 T2 W$ ^
upp_interrupt_count = 0;
: z2 N5 I0 u; D$ B1 E" m- k7 C1 j3 p
upp_error_count = 0;
; s3 r! x. n" x J
6 P6 J& d$ F2 g; x* A: A5 p
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* p8 D' Q% T9 D- G
// Initialize data buffers
6 f9 u0 S9 ~, _
for (i = 0; i < upp_frame_size; i++)
% }$ c9 I& H6 m% g( I( J4 o
{
6 D4 j) y; ?+ Z/ T+ B0 a
upp_buffer_b
=i;
+ O; q+ ]" C2 M2 h/ f, d
upp_buffer_a
= 0xDEAD;
@$ ~( P1 T7 t+ l! |, q
}
- ?0 J1 s0 N9 p9 X4 Q
9 [" x) A9 \# w& d" h
//for(i=0;i<1024;i++)
0 a" C# C$ ^7 q3 N" w* _
// temp
=0;
. b* e# |! m# i
4 a2 C" u" I/ ~1 Y6 b9 M# D
//UPPReset();
8 X0 o: e0 h0 x
/*启动UPP DMA传输*/
- F* a- L3 P1 c/ U9 P% |
UARTPuts("upp_prog_dma_i\n",-2);
; U4 j3 Q: s/ E* Q; p" J
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% Z; u) V+ c! j" }
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& H7 r L. Z& m3 ], L% s
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* B! k+ m1 G- k
" e* C' L! [/ G' L
UARTPuts("upp_prog_dma_i\n",-2);
; b* d: f3 _: p# z' _
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 g s/ a8 |) k1 {. a7 }
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, I2 d' N+ L A! e
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 {* a5 V& i" D- ~' Y: E( [& s
4 Y7 G: ^+ M" h/ O
/*等待UPP传输完毕*/
& G- R' U$ @1 N7 k, {: g
//i=0;
" T) x$ _5 M0 W' k3 j3 ]5 P2 h5 }
//j=0;
1 Z3 K. [& W% F7 O
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) Z0 s, L3 D5 ^
{
- _, q7 J1 w; v0 O% h
/* 测试UPP传输的同时操作普通DDR数据
; V- E. S" u# Z3 [ m* i
temp
=i;
- K; F3 G# b$ A
i++;
# Z9 ?: U$ S I' c
if(i==1024)
/ M5 d7 _# w6 B) W
{
# X% J9 t! I4 \( O4 d
i=0;
& p# \; n* `4 p4 I5 T0 s4 `0 D# N
j++;
/ c6 P- t6 y" l1 ^
}
1 M9 a5 h8 Z5 g8 [; G% i: z0 l1 n1 l y
*/
, U( k. B/ G l, e( R: u$ p, c3 ]6 a% e
0 o. w+ T; H$ Q7 }3 X" S
asm(" nop");
! i; ~* v. e, g O
& W4 P0 s' J$ L. _8 q
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ X8 l/ N# X: `+ x, y: U
}
2 H. f6 u {' v2 r
1 ?+ a& o/ F2 t
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# [; e, V0 X' ~( p6 ]8 n; m
//UARTprintf( "i=%d\n",i);
2 `2 B# y6 l+ ^; m8 I0 i0 u
//UARTprintf( "j=%d\n",j);
' ~& [4 ^! U5 u9 w! {+ t- g5 u+ M
UARTPuts("Data mismatch in buffers.\n",-2);
# D# i! _' [6 f3 s' I
if (upp_interrupt_count == 2 && upp_error_count == 0)
: h3 u3 S$ z/ v
{
5 U' `% U3 o+ E
for (i = 0; i<upp_frame_size; i++)
~/ ^: S! v0 k6 o
{
1 R! N! h/ ?% Z( ^+ [3 Y
if (upp_buffer_a
!= upp_buffer_b
)
' A9 O6 _ |( u7 K& L! x
{
" N3 Y- w# z* @1 h! w/ w0 P
upp_error_count++;
) l+ o" ?0 L4 U _' A9 {
}
" D6 H, [! i/ {- G) E' U* ^
}
+ D- {- U0 d/ _# s
}
7 {0 [. d0 a4 ]1 d& e( k
5 S& p6 |/ L# u& ?
/* 报告通信结果*/
, [+ e0 Q3 G, w' y" d+ K' }- r! {+ q
if(upp_error_count != 0)
* S) M' I0 a. x
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( K0 k, h7 V* q/ g. k
else
, q* {" D K; F0 E; y p, H% Q
UARTPuts("uPP transfers complete!\n",-2);
/ \4 O8 `7 h8 x0 D3 t0 f# L* O9 G
' h& j& d/ X' }; k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
! H6 P' `# A; W! \& f: ^# b9 G4 y
UARTGets(ch,2);
" [) [0 J7 ~9 v
UARTPuts("\n", -2);
4 _$ @3 I+ L8 j- W6 W
0 ]+ r; E" g6 W6 m" M
if(ch[0] == 'y')
, v0 A' C; Y1 c0 ~
{
% B* j0 K% _5 N! N2 l- h* T
/*打印全部读到的数据*/
Z G0 V3 A/ T* q: q) F7 b" h
for(i=0; i<upp_frame_size; )
' E; p# y6 c v: w) w0 t! U
{
0 R% P T: m. a* W# k- P( y; h! S
for(j=0; j<5; j++)
4 q; J$ a) a' j, v; F7 g" `. U4 p2 y
{
' S1 Q) W5 e3 J' A( h8 r
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' L. K6 _% w; B1 V& W' W
i++;
2 ?% m6 H# h5 a# h! L8 t
//if(i >= 4096)
/ Y0 ^3 q) _: @* o: u
// break;
H7 m( I7 a; L4 Q. C' D
4 U# }, ^% F2 {( @& e7 T: q
}
8 }8 E: L7 }7 R
UARTPuts("\n",-2);
# O0 q! M# s! l6 G" H: C
}
r% \( E7 p/ b5 }1 z6 r1 H6 o
}
4 Q0 }7 a# ^, S7 S
/ B' E' O' N6 _% k
}
) B: S& j9 b" i3 |; Q
! F+ p: V* r3 @$ `
$ Z; O/ i4 G e% O" i. }/ \' f
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, c! ]! L7 P* U! D% Q* Y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' _& O# x% X/ m$ u: J
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4