嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% A3 _4 J. j- C. P; d4 Z5 y
Void UPP_TASK(Void)
9 H9 F* ~2 Y& s& a+ W
{
4 ^2 Y Z5 ^3 s# }8 E- R
+ E$ `2 }; Q0 E
int i,j,k,target_int_count=2;
1 D% q2 h% O \" d: H- Z
char ch[2];
3 Q( p8 W [$ u6 D
7 w# V9 o+ K2 T; N) l& K% F
2 V) d3 T- }7 v
0 Q9 \4 |, t) Y: q
upp_interrupt_count = 0;
) w* _: j$ U3 C8 v% y2 ]
upp_error_count = 0;
. K$ K9 @3 |! k" |9 Z0 N
9 q5 T1 K3 H0 l5 ~- |4 N: U
UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ I5 P& f4 z: i; N! Y( R
// Initialize data buffers
8 Z& c. ~6 O. N& t2 \( u9 Q" i
for (i = 0; i < upp_frame_size; i++)
4 O# |: T5 I: h. z* z
{
/ k5 m% k4 w& Z4 J# f( B; B$ x
upp_buffer_b
=i;
- }9 N- z3 M' x' f
upp_buffer_a
= 0xDEAD;
3 X# ]9 I# M3 w( W' b
}
7 M W8 O: ]! [ L7 h
9 l; ?. ~; R$ k, g: s
//for(i=0;i<1024;i++)
0 U# E$ w n0 {/ |- Q" r S- T
// temp
=0;
! r. @7 V4 F; ?% o/ K% s5 y# P
0 \6 W" i' g7 Q1 D
//UPPReset();
) ?4 {7 y* [( A# S u1 x' |$ k
/*启动UPP DMA传输*/
" I# K0 v9 _! c
UARTPuts("upp_prog_dma_i\n",-2);
- x3 x3 V# K6 V9 l$ _
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 J1 B! j: R- @6 d; Z& o( B ?' j
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' C% x3 [2 n. d6 E
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: A+ o6 [7 I0 h3 |% A2 F
$ G% d. r# X# t& k4 M) n
UARTPuts("upp_prog_dma_i\n",-2);
( \6 e2 C. o/ `
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ v3 u3 ~# n7 c' c
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; N/ Z( E$ ~/ l5 D/ ?
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 M- C3 l/ R6 T
* ^8 y. u, u4 b/ X/ h0 T
/*等待UPP传输完毕*/
0 J) Y5 f. W2 r) O$ k1 t, ^
//i=0;
! v5 j3 d2 N: B& ?" x
//j=0;
2 S* A5 {0 r- }; t# r( J7 [
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 O3 Q( K% N( c% n, V- z3 m
{
; i" ~2 ], u, z8 n
/* 测试UPP传输的同时操作普通DDR数据
: G5 }6 b* o3 s; O6 w$ a
temp
=i;
- a- {; z$ g! [7 Z
i++;
/ I. ?& X3 G0 Q A
if(i==1024)
. S7 D: W& v3 m/ f% [
{
" z$ n- h/ x5 E9 T1 _! M; F2 z
i=0;
, t/ }) F) }, h# d& S& p O
j++;
D) a2 I6 `9 f! A9 I
}
$ F- U6 y0 o+ I% B$ C8 d
*/
0 X- v! t# H d0 I# U4 Q# U8 H
. K: c% h! T* o* s* j( U$ @
asm(" nop");
: Y" [$ s( ]3 \. U0 y$ `/ Z8 @5 }
2 D! ]; y3 O+ Y1 Y; v
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ g. m6 p* D3 C* r0 n
}
- G1 k/ u) F7 a
: W8 V! M) U4 L
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 a: R5 t2 b; D' {, x7 J
//UARTprintf( "i=%d\n",i);
' t* g2 S$ q# e9 F
//UARTprintf( "j=%d\n",j);
# g1 ]( w4 R" I2 z! T7 {# J% t
UARTPuts("Data mismatch in buffers.\n",-2);
- ~4 Q/ Z+ [2 h, ^
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 i6 N% y& I; n i6 A* G& Q+ ~3 W
{
0 H7 K& |' `. Z3 R) ~
for (i = 0; i<upp_frame_size; i++)
& ]+ A) d' Q$ j1 G( m( J# D4 x
{
4 ^8 Z& d" l, U! a+ p
if (upp_buffer_a
!= upp_buffer_b
)
/ F! w* b2 @! r$ p1 m
{
) |+ K+ J' c0 n* I& c3 @/ i+ @$ \3 H4 ~1 p
upp_error_count++;
; f0 O+ j( B, m# c0 [( _0 k' \
}
$ }! z' Z$ R2 f; N
}
8 p% [! e5 Y2 [. D
}
2 f# O1 I. [! b2 y8 Q
! }6 j' O, [( |$ Y- V4 @7 X# Z
/* 报告通信结果*/
; a# Y5 m! k/ i5 g/ g, z5 Q
if(upp_error_count != 0)
9 S1 S3 p, ?% T6 U- M+ D, J
UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ S. f% z9 f6 H
else
* ~! d# I. B; J" ?, U
UARTPuts("uPP transfers complete!\n",-2);
3 E2 k( J2 b- A1 t; O* m
" G- f) U1 O$ i: o! k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 K, |! ^8 ^# w: S H5 g8 c
UARTGets(ch,2);
- K( p2 ?( M1 g/ |
UARTPuts("\n", -2);
8 E! j/ Z3 A: d2 R* e
, }5 q0 C- \2 r) X" a6 L
if(ch[0] == 'y')
4 r; N4 u% C% ?
{
+ K; k- p: y2 x% W6 `3 j
/*打印全部读到的数据*/
" ^# l; F- f" z, r5 c
for(i=0; i<upp_frame_size; )
4 a5 `0 S8 C! g$ l. w# l* O. I2 h7 l
{
9 c0 Z# ~9 O( w! y, E! q
for(j=0; j<5; j++)
0 c" p( W! f7 A" H
{
6 [7 t" V. \9 _0 n1 w
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
: F, f- u- _3 W& z# u: @7 o) F
i++;
# |* v' R7 p+ Q
//if(i >= 4096)
2 w9 L/ P$ c0 x" i5 P: `
// break;
. Q5 R8 ?6 H; O8 E! i
1 C4 {* D# y; ?8 F. D- l0 t
}
i& k5 M4 ]0 l v5 ]0 m
UARTPuts("\n",-2);
& b$ y; j! c" u! U+ h& f
}
4 B$ v! M3 j, p0 W! c
}
" y7 m( J, J% x. K' _
# p5 y( u B/ c$ j6 |/ Y
}
! J5 f2 v$ v. u4 ~2 e
3 Y9 k. ]& Z9 Z6 J( {' b; J5 f
' }. p0 h; x8 G) w* C4 ~
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" T; e. u3 R( S1 M
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( k; U1 J7 q8 `3 s6 O5 A
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4