嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) T+ `; o* ~# _! P
Void UPP_TASK(Void)
( T0 g6 J; y* G% m
{
6 l; g4 Z% @$ W; T0 |* ?1 L: f
! `6 S. S- {. X$ Y0 t2 s" C0 D
int i,j,k,target_int_count=2;
2 Y; C7 o! m; g1 Y, k1 n1 h0 |
char ch[2];
& u$ o( ~8 {6 j$ R1 f' j
: R I+ x/ ]/ o% i: Y
{/ O/ `, E& G2 H: B
- m2 E2 o& T$ R4 f" j
upp_interrupt_count = 0;
- ?, W( j; q% |$ ^' c( L% v
upp_error_count = 0;
& T/ D0 z0 n& U& ^
2 `5 X2 ~/ b& p, L+ d' f1 m
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ Y+ `, X; ^/ |# N! q, A8 Y/ {3 Q7 e
// Initialize data buffers
4 ^* q# b$ f* X- p$ c" o
for (i = 0; i < upp_frame_size; i++)
; _1 J$ r' T% Z& ?, y
{
+ w y! i& L) c4 H
upp_buffer_b
=i;
1 A+ Y/ f; C) D5 I) C
upp_buffer_a
= 0xDEAD;
6 G/ V( G. g) R J8 D
}
0 `, {" g, h* C+ t$ I
: q# H+ x3 t& w& T3 x1 U; L) k
//for(i=0;i<1024;i++)
) W* V) Q, ?0 \5 I5 ~
// temp
=0;
N. q. \ c& t" g/ O
4 O& k8 i' a3 Q* `2 R2 J: w4 ]! e
//UPPReset();
5 O6 E7 W" F) _2 `5 z* e$ }) x" v% @
/*启动UPP DMA传输*/
T- n, A c( x( C% l
UARTPuts("upp_prog_dma_i\n",-2);
# E8 ?0 a* f, g6 M* E3 N
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 h6 z" ?5 @- r) p0 \. U
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( _3 ^7 p8 g, f; O0 ~
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
g) S6 }5 g+ V; `
# o( V/ X, j) ?0 g9 I
UARTPuts("upp_prog_dma_i\n",-2);
5 k9 ?% ~1 Q$ H) `
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; p9 }& ^" n) F, D1 |
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ B; \+ v. b$ _2 T3 h" @
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* ~# D5 h2 f/ {/ v) ]- }8 ]
: _! T- K' L% O4 Q$ r, a
/*等待UPP传输完毕*/
# L9 d& n* [& R8 `; l4 a
//i=0;
+ _, m* c" A8 W
//j=0;
: F. i0 F, Q- ]( g3 q) p. U
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ n ~4 O' `" P8 X0 V1 j, Y. u
{
# S( E$ G' e/ g0 j" I+ Y. ^
/* 测试UPP传输的同时操作普通DDR数据
. G4 [$ [* Q# Y% C, D' {& ?5 E
temp
=i;
$ A+ ~) |) J: N: S% M5 a5 Y; Y
i++;
" L/ i( z- \3 q9 K" v& b
if(i==1024)
' _, C3 E4 ?, ~/ f1 ^6 z
{
1 p- O# g% R' {! u& c% P% V
i=0;
; o" q, ]1 k& J4 _8 s
j++;
: G9 j+ a- E. |7 x4 r! Z
}
% P; P& Q; Y+ L
*/
. b2 _- [, t% e. l2 N
l, `; A* C- H6 j+ ?, L' S
asm(" nop");
* s) k, ^# k, ]0 Z
7 }2 O: g* j8 @. T
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" n3 [4 ~4 ]! J5 M2 W% D7 l% R
}
; u3 v& n' Q6 U3 o' R9 L
R2 J) x: g: F) Z9 D9 C; J3 m/ U' Q
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 h9 o! G( m1 v7 t5 H! w8 e0 C
//UARTprintf( "i=%d\n",i);
" c1 T( W4 ~ s" C- z+ z2 k
//UARTprintf( "j=%d\n",j);
; U% W" l \8 V: [
UARTPuts("Data mismatch in buffers.\n",-2);
+ j4 @7 V9 h. e; k$ h* I& j
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ t0 Q/ e4 |) R- O9 `8 Y
{
- y0 B( \6 ~. R; O4 w, V
for (i = 0; i<upp_frame_size; i++)
& M: u: O; L1 h/ y1 p) n D4 W
{
. p" F: f! |0 E; z8 s6 h
if (upp_buffer_a
!= upp_buffer_b
)
* y: _9 Z+ q$ ?/ f0 k* W0 x
{
$ W5 p% C. A7 O" d& j! l
upp_error_count++;
o2 W3 L) m, L3 i* W& _
}
$ m( n4 b+ H% Z; W/ ~ X
}
! _5 J1 a# o+ q+ M7 Z( p
}
5 o- K) D5 o( p, ?+ J1 j
8 a, Z D+ w( c5 r
/* 报告通信结果*/
- E, ?3 i4 e. D
if(upp_error_count != 0)
0 E1 {) l7 Q6 m& f& @
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 g: |3 a$ C; j
else
1 t+ u; L5 y8 Y; C$ M; }! c/ R1 ~
UARTPuts("uPP transfers complete!\n",-2);
* U6 Q& S' E* G0 ]" a
, K- [9 {4 c5 n2 b& T
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 U- K2 Q5 w" H8 R; V- @8 |$ s
UARTGets(ch,2);
) j" ?0 I9 g: D6 d+ h) @9 W, I
UARTPuts("\n", -2);
9 S2 l6 }' f; W( o% j
1 \- R' w G6 k" p- \
if(ch[0] == 'y')
/ ]+ ?3 r: l0 C% D& c
{
8 F/ m, J6 e7 `9 m* {
/*打印全部读到的数据*/
2 P2 A( Q, `, [: F% ?0 Z8 D! ~
for(i=0; i<upp_frame_size; )
' q( V8 s' T5 q: [" y
{
V, S# I4 x$ M/ g. v
for(j=0; j<5; j++)
) X. b, l) e- q. c( F
{
+ m/ `! _8 `7 L2 X( g2 O& b
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. A' O) ~' @& S
i++;
& ?0 B# H- B( R/ r( L
//if(i >= 4096)
: G: e4 h3 V' G% K$ q5 A
// break;
: `( e+ B5 `# l U3 ]
; A; Z2 f( z& W; p& @" _. _
}
' v# L; p% P8 r
UARTPuts("\n",-2);
~/ J+ I' i2 Z7 c
}
8 R% `! H F8 E8 q
}
$ ]3 t+ d- P+ U1 _8 w8 g; q
) Q- Y0 y) W7 F1 [' d2 q6 j$ z8 R4 M/ [
}
" ^( ] r9 P I( j+ U/ A% c9 x
3 ~# @# A$ m+ ^% F1 v7 `
N' [% i9 B+ k4 @8 N9 L2 K; M; ]
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 s/ t& }0 S: y! ~1 E
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! _2 A" o& X$ R" s) o) U
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4