嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 [& n* z9 R/ w
Void UPP_TASK(Void)
' r7 O; F( R7 g" }% n3 _
{
' T* _, f# y1 [9 B6 @5 J4 f |
: M, Y& U( q, ?7 \
int i,j,k,target_int_count=2;
v5 g3 ~9 N( \/ w: e7 g
char ch[2];
g: G9 U2 M& I: T, C6 P# l& f
# T3 s2 b$ e5 V1 m$ G( Q2 ~' e
0 L5 e8 Y% z# L) { t! }% G
1 D" D% r1 u/ {
upp_interrupt_count = 0;
8 p5 m& g& J5 u* I% W0 }
upp_error_count = 0;
( X7 d' E+ J1 P6 V
8 q, e# h- H; J7 j
UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 x+ X1 G3 {4 Y% l3 M3 {
// Initialize data buffers
( A; k1 e$ G/ \( C( E
for (i = 0; i < upp_frame_size; i++)
7 [, U. Y$ p/ G2 h; F& {& `
{
$ c1 E4 Z( A* j" y- f
upp_buffer_b
=i;
7 K c9 {5 |$ C, d, j, N
upp_buffer_a
= 0xDEAD;
5 v' ?% W( @/ A
}
3 F5 j! R) a6 R* Y9 l+ {9 l
5 o+ Q$ ^# Z+ j# o6 t
//for(i=0;i<1024;i++)
+ I0 h" \" N, a" @
// temp
=0;
- K& Q; x0 o$ H2 B
; {; B1 Y4 ^6 e
//UPPReset();
. T( ~8 f9 \+ m$ A3 h/ P
/*启动UPP DMA传输*/
% G$ l# W$ \$ w3 v+ d% w& g9 o2 e
UARTPuts("upp_prog_dma_i\n",-2);
4 h! Q. R; V* r( f! }/ x
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 y; [. b6 Y! e, a o4 E
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
_9 T6 _; p) F" T& R$ y
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 B" u7 m' ], M0 [) d( G% _
u& k8 s; a; b. n$ i
UARTPuts("upp_prog_dma_i\n",-2);
# m+ A9 S6 N z, C w% O
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* B& U6 v' I2 W& G0 ]
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: R+ U" f0 P. _5 k- O& @! \
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" N1 [) T! M9 ~3 K! i
, Z# u! l* V/ u9 C
/*等待UPP传输完毕*/
7 ~1 i# L/ Z% B% U6 e- D$ V
//i=0;
; Z$ U7 |6 z0 h K4 F- x# c* `1 O( x; G
//j=0;
4 a, k0 I+ F( ^3 E1 ^
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* `# X9 A5 T6 Z0 n/ _
{
j. S. {9 b/ G6 l* h. G
/* 测试UPP传输的同时操作普通DDR数据
6 [3 |9 a |* A/ B9 Q6 j# k) W
temp
=i;
, S. M. W. I) o+ i. U3 M
i++;
* l4 i. i. M; D9 H% `9 B' {
if(i==1024)
0 V f8 a2 |* Z9 ~. e
{
/ L" |: N! K( j0 H, @$ b
i=0;
- x% o+ ?3 h$ ]3 q/ F
j++;
: Q! h7 C8 e& I# B
}
7 H- C$ a& H" Z: `3 @& W5 p
*/
7 z: \+ D( q/ w1 Q) v
3 i" b6 F# p+ F7 A
asm(" nop");
G- Z! E9 t1 A! ?& C3 S
( `2 |6 `* c3 _6 ~8 R
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& Y" ?3 q8 \0 j" p
}
8 C, l. q. Q5 s# J0 d
6 d4 `! Z5 {2 k$ {; R, X3 K; t. r
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& l, J6 `) [4 `0 E1 j" G6 l+ W; ~
//UARTprintf( "i=%d\n",i);
3 g; [, w, @( Q) L8 f
//UARTprintf( "j=%d\n",j);
V4 A+ S S& _5 L5 I/ e
UARTPuts("Data mismatch in buffers.\n",-2);
& x- A8 E/ n. Q( p' h; d
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 C. C1 {- p* s n8 \" ~" q; U
{
0 f4 w) m# H, F' P. u
for (i = 0; i<upp_frame_size; i++)
. u* u- d3 n, {. O* c+ q
{
/ `! I" S9 [! G1 @& s
if (upp_buffer_a
!= upp_buffer_b
)
- s; N0 Q) r5 d' r# e' ~- t
{
4 X0 @0 y6 i8 y
upp_error_count++;
! v# j! J( G4 J5 l$ A: V
}
. S2 s( R& S8 e' H U( M6 c' x0 P
}
0 [7 e# t. F: d1 n5 A( C; d) X
}
/ a! z) Q0 x7 q+ q* y8 H1 L
* T; e% q% ~4 Z2 d# t6 v( A
/* 报告通信结果*/
5 O, f. y; P; ^5 [! n
if(upp_error_count != 0)
- c3 c; ]8 S8 C- Y0 s9 t
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# }1 b2 H7 }+ u: g
else
0 |. G- e1 Y" A# N: X# O
UARTPuts("uPP transfers complete!\n",-2);
1 N( P, R9 d& P2 {) \$ U) z- q5 R: D
& a/ h3 N- x9 Z6 U
UARTPuts("Do you want to print all the data?(y/n) ",-2);
( R4 M; ^, y5 a5 ]% r
UARTGets(ch,2);
: X* W! x3 p* M. J' w$ e
UARTPuts("\n", -2);
/ F( ]# e! L& x# |* J4 r% _9 `
; ?0 Q5 O* L' x/ a2 B
if(ch[0] == 'y')
* y4 p: [ e7 `9 l
{
! M7 p; {1 z2 I* M/ I& C* B
/*打印全部读到的数据*/
4 v+ a, w% ^' Z& `. {) d7 y
for(i=0; i<upp_frame_size; )
- w7 D$ V; [- _. N* ]3 w, F
{
& v/ P2 i# S9 S' j
for(j=0; j<5; j++)
+ }+ I7 d8 @9 X; F( h/ ~
{
+ Q" b. O+ G, J% v
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ d0 C) r/ d4 q3 s; g$ q% `) c( Z3 r
i++;
% J! Y- T, m3 r' _, |1 E0 t
//if(i >= 4096)
% q& z) d# `; W3 V4 ?& V. ?
// break;
* \% a$ q& v0 O8 O v
0 a9 g9 U' |9 S! S8 E9 Q
}
; {7 f! _* U; @
UARTPuts("\n",-2);
+ `2 U5 j& L+ l O8 c) |6 x' M; v
}
1 V! R% v4 s- m
}
( E; u% |9 k' E! Q" K8 V, G, Q
4 a% K2 R2 O. D1 A+ o3 F1 e2 E; N
}
3 O: D" C- u# [. i$ |
$ W8 H& R" i# s( s5 [
7 l0 W+ ^# f- \ p# @9 J! `2 ~% B5 e
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" C- |- z7 L1 U* a
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 d0 s( B# s. `+ {# V5 ?
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4