嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- w! P5 [4 @1 _# S0 r
Void UPP_TASK(Void)
/ V% m: `- }& c" }* P. a7 P
{
- [7 `% K- h8 Y$ l# K
1 C! [7 o! Q: b! ~8 _9 e
int i,j,k,target_int_count=2;
' o/ z m1 c# [# V* r
char ch[2];
* `) }9 a7 ^* n
! t% e8 B; u* C: S: m" H' A
4 s3 P* \) h, B. }
a* H1 }8 t' |7 I. N; r
upp_interrupt_count = 0;
2 C; ^ Z9 _& |
upp_error_count = 0;
: g* b7 g+ A! o
' P# Y& _4 t1 U+ ^# W
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# N$ N% G1 J- f
// Initialize data buffers
& U! B9 S. j. |: w) \
for (i = 0; i < upp_frame_size; i++)
% ?3 O! i/ h: Q! |
{
$ Q! }$ _( B) w; u
upp_buffer_b
=i;
) d g& `% |3 v, a
upp_buffer_a
= 0xDEAD;
! [# Z9 r1 V, i& i
}
d+ p3 B2 ?* Q! z
) f7 p: a0 B" ]$ {% A2 P" e
//for(i=0;i<1024;i++)
1 ^1 z* ~4 S# _- D
// temp
=0;
P- I# p( q5 b; X' V; ]
# n% B3 q/ P4 d7 S; n
//UPPReset();
- d; F2 n& M' a- q, [# k% }
/*启动UPP DMA传输*/
$ @4 R# P& ] b! c
UARTPuts("upp_prog_dma_i\n",-2);
4 @; P: O, D& L' l& `9 S
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 f* V) W3 e1 z, g8 `0 y4 t$ e
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 i4 O% N/ {3 h
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 T H' z* Y( a. P6 B/ Y; {
1 I* q) i& E E; F& T
UARTPuts("upp_prog_dma_i\n",-2);
) s' S5 O( Z! X+ F
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* Z. m* L4 J4 F# [! x; Z
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ R& a. k/ Y9 i% ?( Q8 U
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ S* a g/ A: y% p/ L
" n' K+ U; |- w4 ?+ r9 U8 j
/*等待UPP传输完毕*/
+ C7 k) x) o% n3 [& V$ K# Y
//i=0;
# F9 n& U0 \9 `: F& s$ K
//j=0;
0 m1 L" w5 Q' P2 e
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 t6 _9 D2 P$ {7 k
{
* D& o" ^- ?6 `# u, a9 i
/* 测试UPP传输的同时操作普通DDR数据
) \# m6 Y6 p7 a R% P
temp
=i;
C" q; ]6 b) A& u) ^
i++;
$ G' B; v/ m& u; o, p8 A$ m, w- b
if(i==1024)
, t6 x9 [( A0 s; H4 V
{
; q% P0 p1 `; f* v, L0 j$ | a
i=0;
8 L' `, ]+ K" Z, v7 U
j++;
( n4 z, J7 M: w Y) e( f
}
( G5 B+ i7 R" S0 Z1 k8 V/ d' q
*/
" h d+ S" E! ?4 Z: y5 z2 s
0 U! o' {# L# _2 Q W
asm(" nop");
0 f- l- t/ b# P2 [/ f% k+ a, g& C* G- `
: X8 J: G& G/ j$ W; R- Y7 |
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. s0 g6 k% ]3 k" w$ A# V
}
& t# P: @, E8 X. g" r2 J
9 D% B H' {# Z4 F4 K
/*检查UPP传输的数据是否正确 (loopback modes only)*/
|8 F) w( A" V2 k! o+ @$ N8 P1 R
//UARTprintf( "i=%d\n",i);
# h% b' T& y9 B' ^8 p# V- O+ j0 Y
//UARTprintf( "j=%d\n",j);
8 H# {4 `8 _0 y5 [ ~7 D# C- t2 o
UARTPuts("Data mismatch in buffers.\n",-2);
& I% X F, n8 m5 g% K: K+ O1 p0 o
if (upp_interrupt_count == 2 && upp_error_count == 0)
R/ Y: Q8 s( ^% h
{
$ I, W0 V4 P: {" A4 J
for (i = 0; i<upp_frame_size; i++)
7 C& H/ E; V2 U1 }$ e
{
. h8 F! R* `9 @0 ]" {+ H
if (upp_buffer_a
!= upp_buffer_b
)
/ w( w+ v* U4 ?4 r
{
. ~7 d5 I; K8 H' _0 |
upp_error_count++;
7 K1 o4 H4 ^( F) o5 F6 `
}
/ J& V: s8 S4 v% y# P: q
}
; A! K* q* f7 \: b3 {
}
- k& A- a+ f P3 J- Y% R& R
& } N4 t. @! u+ K& |' D, b
/* 报告通信结果*/
1 j, p, U/ N6 U
if(upp_error_count != 0)
# T4 o& g8 ]7 i: P! O! `- N
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% y* |" v+ {; H5 }% u+ M$ n
else
" H; h" o, Y* y" x8 k' ]6 X
UARTPuts("uPP transfers complete!\n",-2);
5 |( X, H: r/ l1 w, Q4 I
: |. v7 g" @$ N( @
UARTPuts("Do you want to print all the data?(y/n) ",-2);
! b) {$ Z) r h2 U, P8 B0 w4 d1 ^* |! l
UARTGets(ch,2);
* q6 `* h0 Q: x+ y% [
UARTPuts("\n", -2);
3 L+ w& {# k4 h. g8 v
; `3 m* g! e5 k: H3 A6 v
if(ch[0] == 'y')
4 A& N B- R2 u' j: H
{
) U3 k( Z& o: r
/*打印全部读到的数据*/
+ k6 I3 z# O/ U3 ?% x
for(i=0; i<upp_frame_size; )
* a7 ?2 E5 J0 w% e9 _: @/ v
{
, F2 ~ d: F6 v
for(j=0; j<5; j++)
% u% J; s. s7 m9 }9 }
{
C- q* H/ @* x/ [" z! |
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 S+ c1 [+ P, z0 D6 ~. m
i++;
9 i- b1 f( \2 @/ z# q
//if(i >= 4096)
: G- ^& w2 x2 I
// break;
8 [' x6 n7 |( p, E2 r
9 U- s; F6 N5 C/ U
}
" T4 ?/ _6 y9 d- W3 Q
UARTPuts("\n",-2);
3 G a, F6 B; s
}
+ J; S! ~: W" z- \
}
; C" X" x4 n# r# ] Y6 I/ M- C
8 u% u, H/ v& E) E/ j6 q' I$ {" `
}
0 R( ?1 d/ Q2 |8 m" t! V
* a* p5 E# [- |/ J# {9 {' T
, y% ~2 N) \6 a, T$ N
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& K* L. ~# K4 `: Q0 H5 F# t
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; Q+ g L7 c8 [5 w/ s8 U) k
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4