嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 V# \7 a% Q+ l7 W K- Q
Void UPP_TASK(Void)
7 G* y0 J1 L- }$ |0 [
{
: K( Z% ~2 ]9 o# a; M/ V: {" A
% z3 q: W# b3 \$ m2 O
int i,j,k,target_int_count=2;
/ t/ a1 C7 O( ~# U
char ch[2];
0 Y+ g3 r) e2 o9 Q: K9 l7 d9 i
" H; s+ e7 [) v2 ?
' j' Y- l: D1 n+ O
" h# ? Y7 B3 V' F+ l7 z
upp_interrupt_count = 0;
" G6 w" i' D: ~$ D
upp_error_count = 0;
1 o) c8 ]5 B: c* e- F5 M" e
R& t0 L" ^' r3 w
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 g1 r# _$ w: B6 U7 a+ j7 R
// Initialize data buffers
+ E5 l5 t+ G2 v& s4 C5 s5 ^
for (i = 0; i < upp_frame_size; i++)
$ C I; {1 h$ K6 B. }
{
% C0 z8 ^; [! m8 y/ L# s, e
upp_buffer_b
=i;
3 \: @! L }) z) z( Q; {* J
upp_buffer_a
= 0xDEAD;
) I9 |; m! i1 X" A; d0 ]& q
}
: g5 x, @! B9 P
8 P; ^' E5 w& |" Z7 ^* p
//for(i=0;i<1024;i++)
L$ f' A% |# L! {
// temp
=0;
% o; L- m+ @5 G7 Y* z1 |7 R9 `
0 H+ D% }# C$ l" p& A1 E/ m
//UPPReset();
7 F( H2 ?5 @1 y3 F- Q
/*启动UPP DMA传输*/
* Y! J" A6 L+ B: q' S
UARTPuts("upp_prog_dma_i\n",-2);
# Z' `, l4 A, ^# l, e* \/ P- {
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- _, l( W1 Q/ `' Q' O
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 a; t# S. ?3 r% ^2 y% K+ @
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( ?- R# k6 n. K; ]
& T+ Z* M2 {+ m) @4 e$ K$ j* N
UARTPuts("upp_prog_dma_i\n",-2);
& f: t; I1 r$ F; Y& M5 f* `& }! [
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! d* j% y! u. s7 h& t$ t
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" d' Z. G( B# T2 c
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( H4 [, v' h c' B+ F. o2 c/ t
3 h+ | S! A2 G/ M+ _( J
/*等待UPP传输完毕*/
) r# w: G6 [9 D
//i=0;
/ x/ A% f }' z |' W2 Z6 T
//j=0;
. ^& E( x3 H- Y( N& b. f6 U3 [
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 g" f6 N; L: k- }- |2 o+ Q
{
2 @! \) X' Q( X8 M1 K+ F$ q; |
/* 测试UPP传输的同时操作普通DDR数据
3 @1 ]% s* q: l+ a
temp
=i;
. @7 Q+ F8 s C; V9 b) x, b
i++;
6 \4 e F& ^2 T- h3 Y
if(i==1024)
! T# [# A2 i, d8 `
{
1 H. b3 t, B* j. p: N: ]$ l
i=0;
$ W6 ?8 {" E( d- `
j++;
( L* |3 q- m2 e. B* ~, j. |
}
* h/ C- {' @; `& }# V3 k
*/
- E. V! V' m1 e$ f0 P0 V
6 P" v- y6 a3 R4 v
asm(" nop");
% n: I. m, M! L# Z
0 t, f( h, n. z/ `3 S2 [) ^% f9 L$ r
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: d+ }3 v) `$ B) k, f
}
8 Y1 e6 {8 j7 ^1 D, O& r# S4 o, y
% Y2 t( u0 v$ h8 e/ J& U6 a! M
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* c& O @) X, s& w" }* Y8 l
//UARTprintf( "i=%d\n",i);
. d4 l0 O7 r. }8 {( f. d
//UARTprintf( "j=%d\n",j);
( b( ]- T# v) G D7 S# Q1 x. R
UARTPuts("Data mismatch in buffers.\n",-2);
4 B- l! O! G" u. C' r6 D
if (upp_interrupt_count == 2 && upp_error_count == 0)
' S T8 V# H5 M7 R% H/ N+ L2 |9 r: q! K
{
% U! Q: @0 c( B6 K# J" h
for (i = 0; i<upp_frame_size; i++)
( V# C! T% P8 C" G# j
{
6 {" ^* A; o* H2 m/ V
if (upp_buffer_a
!= upp_buffer_b
)
2 c: ~$ X: Z' Y1 j/ Z
{
; D& C) N- d0 @2 e. |: M, w0 f. g
upp_error_count++;
M# U; @& S2 |3 w
}
/ z9 d; O3 w/ F' A+ I5 i% H1 J! J! c
}
7 W6 k7 e) W$ }. T H% e
}
$ i' `8 E& }4 T- T7 P# H: G
4 N! B+ g: A8 p
/* 报告通信结果*/
! t& q/ Z y4 ], m$ n h7 f
if(upp_error_count != 0)
w) {& `9 j: n- j( N7 k3 V
UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 U( l5 `0 ~1 I) g) p: H w
else
+ }/ G1 d' `' [, Y6 w5 H
UARTPuts("uPP transfers complete!\n",-2);
% `* e3 v3 Z6 d1 G7 z9 Q) v
# @4 ?! w1 a/ G' K# r
UARTPuts("Do you want to print all the data?(y/n) ",-2);
! v) X t/ B" h9 m3 u, K1 I* R
UARTGets(ch,2);
" o4 }) N* @+ O/ F( c
UARTPuts("\n", -2);
7 z' d- v! ?* |, w# W
i( y/ B' ^ z% f
if(ch[0] == 'y')
6 D% c8 v3 i) q; T2 m
{
+ \5 {" U/ R" X. W
/*打印全部读到的数据*/
" ~/ |& O2 h, i+ ]7 z3 T, X1 ~
for(i=0; i<upp_frame_size; )
: s2 u! `9 l. a. j+ B' t; V* M
{
; a, u# P2 q4 _
for(j=0; j<5; j++)
2 G4 X9 y5 t6 ]; A/ h$ C2 i) a8 t& N
{
8 Y1 _ I( Y, N% \4 t
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* c# G( p8 _5 j
i++;
% ~9 O$ Q3 \; \7 c$ q6 U8 V
//if(i >= 4096)
- b6 C0 C9 Z' M4 w4 d {+ s
// break;
, J, f7 S K& l& I
7 S' h0 J9 `- @
}
" N- t* V6 u& q3 z
UARTPuts("\n",-2);
X( }& F* w3 r) u t" F
}
, H5 v7 p+ i6 l, |' }! O5 V
}
. p# }) h8 F0 x& S6 ]. C( T
9 ^. p0 f) a& ]- r) B# U
}
9 ^4 }8 L. ~3 t- z
. I# ]0 f) z& ]
( w, s+ y6 R0 X: T0 x9 k H
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' O5 b$ p+ R- u+ v4 d* G
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 x) S/ X5 T' N) e4 p4 X" w8 g
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4