嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, C h4 N f& e# W: B
Void UPP_TASK(Void)
4 g5 G7 r1 Z. Z- {4 I
{
! F( c$ P0 [, L0 g5 H8 y: S3 i
0 p) @7 J+ |4 }+ j
int i,j,k,target_int_count=2;
: r) u' ~; u. j/ p8 ]
char ch[2];
& ?7 v7 U9 o; H
' {5 h4 }) w4 M4 C3 P
q) Y, v5 \* n* w
+ B8 r# [- j1 }$ [' ]
upp_interrupt_count = 0;
# n" f7 [) p6 J5 ~: ?$ N& U
upp_error_count = 0;
; I a7 w& c0 T
; V T/ b. |- r5 J
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; c c s M. ?+ \) R# s8 T1 C
// Initialize data buffers
+ @& P6 {* k, `
for (i = 0; i < upp_frame_size; i++)
( ^ [. s- z# J! d
{
1 q' q7 N4 L6 \/ y' D
upp_buffer_b
=i;
% a7 b& ~' i) d; G% d
upp_buffer_a
= 0xDEAD;
+ N# a) a" n7 U) C
}
. U. c: {* Q j7 W/ y
; t- u1 c. Q( ^9 Q$ p* v
//for(i=0;i<1024;i++)
; X+ B3 r, P* L2 P5 b) {5 k, y
// temp
=0;
* |$ W1 M4 D! y( j( A$ P) g
# C+ D: q e7 L2 ^9 d) [1 S) N
//UPPReset();
/ H% |1 J; @- H8 P* T
/*启动UPP DMA传输*/
6 ]! P' T3 f8 Q3 E. l* c# }: z, [
UARTPuts("upp_prog_dma_i\n",-2);
' p# o, R4 @7 D* g
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* p. I0 x+ [6 i* A4 K$ y' Y
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% N# Z9 A& n, c. `! M- E
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- t9 v# h$ ]* U8 ]' x- R
v+ r" W* E4 Y3 ]! F, u
UARTPuts("upp_prog_dma_i\n",-2);
4 C# [- t8 E8 ?
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% _9 N, O) ^" k
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 i/ `* r% ]% z5 a* F2 E2 V$ n/ l
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; Z$ n6 u/ j6 L2 S1 W
$ y! F& O- c7 b) T0 F" E
/*等待UPP传输完毕*/
7 S/ {/ _, T' G8 m# O3 h% p& n
//i=0;
' j$ b2 P9 q0 ]
//j=0;
0 g# \% k7 a( q H. D K' o% Y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ W4 j l! ?/ z
{
2 m+ o# E# i: ?8 k( N7 V0 {2 S" Z" \8 F
/* 测试UPP传输的同时操作普通DDR数据
/ {+ A" }- ?6 J- b) L- L- j( k1 K
temp
=i;
% `" h3 Y+ S- T$ e! H0 B
i++;
1 V( Y# B ^* h! }/ f, m6 X
if(i==1024)
% n$ ~* U5 c! I
{
9 V4 I% p5 ^6 U5 B
i=0;
( {, b7 H/ Z: g7 g, h
j++;
' E2 a8 x7 |, b0 }+ j$ g( l
}
a" M9 l) j. V1 q; f" ^
*/
. @# U9 l2 t# K x& n0 {. v# u# }
7 M$ H5 l# d* K- v7 N1 O4 [9 j, j
asm(" nop");
; b. V/ p& X( E4 f
7 A" I, B9 o6 z. T" u$ `. L% }7 P
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
4 ?6 u+ @# ~- x8 w. J
}
6 l5 a( Y: z6 Q0 ]8 H
6 X A; I- a3 k( @+ s8 N
/*检查UPP传输的数据是否正确 (loopback modes only)*/
3 T$ I+ _2 Q) X" K# J2 i1 K
//UARTprintf( "i=%d\n",i);
' r0 ^+ o. Z! k, `
//UARTprintf( "j=%d\n",j);
/ {% H; L: R9 N
UARTPuts("Data mismatch in buffers.\n",-2);
V K( p$ C! Y2 Q1 R: b
if (upp_interrupt_count == 2 && upp_error_count == 0)
: l2 y6 q' t# o& j7 g. k0 L% l% V
{
8 [/ T$ d" l; k/ A3 _- m. h2 P
for (i = 0; i<upp_frame_size; i++)
, k4 u$ n$ E) g7 c* J% m0 K
{
7 {- I; n7 F+ s. }& y2 U
if (upp_buffer_a
!= upp_buffer_b
)
& |$ I, h8 j: @5 q0 r, |) l {
{
6 \; `7 l' B2 e( q
upp_error_count++;
! D; P$ r; v( k& [
}
4 z% A+ Q: ~& @9 D3 _
}
' W" u% n8 W6 ^3 n* |
}
4 v3 o i% A6 o0 I8 F; f! m7 Z$ d
! p" V: Z# P6 ]# {' ?3 v; Y
/* 报告通信结果*/
( p. n T6 c4 M$ l p0 J
if(upp_error_count != 0)
' @! v) a6 k* r& k% s
UARTprintf( "upp_error_count=%d\n",upp_error_count);
, G; g" F1 S3 L9 e p8 X
else
: d! {1 P7 i0 Q
UARTPuts("uPP transfers complete!\n",-2);
, k L0 H# r2 g; Z
0 ]( o2 t' N3 d+ P5 W% X% ?5 A9 ^
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' R* z. i) ?% }' |- G0 M
UARTGets(ch,2);
& b3 p( u$ P" D
UARTPuts("\n", -2);
$ e9 ?9 ^! \5 E
# i: l' A% p% Y& ]& O
if(ch[0] == 'y')
* O# k$ a$ S, O. l" H$ G
{
l- h( T( n- r0 P" H4 A4 D+ {
/*打印全部读到的数据*/
( W) s* ?5 @: K; w
for(i=0; i<upp_frame_size; )
7 R! k+ V0 k; a# O% Z. S6 d
{
* U6 v* K9 K* ?7 _' V& U
for(j=0; j<5; j++)
) t% b) u: D# t1 n4 c) z7 A4 s2 A
{
7 n- q I5 S& U, u" V! V+ u/ q
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 n" r8 B9 E; [/ s: p: o
i++;
! r) @" K: w9 h* s, d, l+ k, j
//if(i >= 4096)
$ C a$ \' M8 ^! k/ X
// break;
4 ~8 I8 G& ]( E i7 M6 x
8 ~' z+ h8 w8 R0 p
}
$ z3 B; F& S0 H; F( I8 y0 p2 }
UARTPuts("\n",-2);
, Q4 s$ [" _% h' m9 ]% S$ G
}
2 Z) a$ \7 h8 x& L
}
2 s6 V6 I4 g+ j2 }- g; E
; F% M/ L0 D! _( `: w
}
, Q8 e% @6 N; j9 U: }) W0 R: P
% k6 g9 v o: E/ P1 j; l! X n
& |& y k5 E% o. H2 h+ N5 G0 I& P
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 t( }4 v3 y% E8 ]& V' D- t( c5 }
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 U3 Z! y$ [( x! T
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4