嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ i3 A- Z8 ]8 ~& E6 |# t0 T1 O
Void UPP_TASK(Void)
- V1 t% e2 c2 ]: O" O
{
' v+ @! E9 {) N- {# u* _
. r& t- b& C" g6 U2 G
int i,j,k,target_int_count=2;
7 T9 L" f; o; c+ f4 e
char ch[2];
$ i# O R/ J2 C. W; u
/ O9 Z( j% b8 Y6 M) W) e/ y
: T' ^3 o5 b, v' a' `$ J
5 F+ d8 H5 g. B* _* P* T
upp_interrupt_count = 0;
" ?7 U5 \: O2 O: Q8 t
upp_error_count = 0;
# z o2 X5 `1 e
$ O& t* R5 T1 V" W. O
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" Y! H4 `0 D5 F4 c- F8 f
// Initialize data buffers
5 U/ U, B5 F( s: N# I! a
for (i = 0; i < upp_frame_size; i++)
% f5 R; a& u& \0 ^# P2 d
{
1 X5 q0 H/ T9 L) _- S
upp_buffer_b
=i;
0 P6 n4 s2 M2 Z0 X. p
upp_buffer_a
= 0xDEAD;
5 s2 ~7 `; V3 B F. o
}
- G8 e/ F/ a- e' L
& c2 ]$ }6 n; A, r2 V, q2 Y$ j2 h
//for(i=0;i<1024;i++)
! C. X; r: r h% \, D
// temp
=0;
# r* E% Q8 {7 w5 l& a( o
8 a) I: h5 j; p+ g
//UPPReset();
8 W4 `4 f9 K, q7 u
/*启动UPP DMA传输*/
& ?0 S4 H/ s2 [4 M R( d! Q
UARTPuts("upp_prog_dma_i\n",-2);
1 G9 F7 d/ x9 M+ G
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- }% u1 M5 R, y% I* g% T
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 Z; y! D+ J" T5 H6 r& t9 i
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% G7 k" A9 Y, _
! j# [7 J* m4 i& i5 E; |7 S
UARTPuts("upp_prog_dma_i\n",-2);
$ e& A# Z7 |# h
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ m9 x/ y8 W! \6 v7 u! ~
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 z: S! m4 g t3 E% x
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( w1 N5 `2 a4 a8 B( K
+ a* z) B3 \$ o
/*等待UPP传输完毕*/
, I- C" e9 ?6 ?% m1 v: P, j
//i=0;
; O! J/ s5 }. s9 a' y3 X7 J
//j=0;
, D% H( }8 N& j6 ]
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 y$ ^' d& X/ V2 M# l
{
) |6 W% R( Y9 Y! ~
/* 测试UPP传输的同时操作普通DDR数据
. c% u, D6 _7 h8 G6 _6 |
temp
=i;
0 p4 R+ D+ A; j# c! r4 p% i
i++;
1 k% ]! P2 H- K* ~ A
if(i==1024)
1 B: a; W. |7 k4 J
{
1 H4 }# g5 D" Q/ ]
i=0;
7 r3 v0 V7 Z5 ^
j++;
7 E5 ?. n$ z# \5 R( D! X0 e
}
9 `9 f, v6 R* _" O+ [ B
*/
2 X# F) q1 l1 E; C
! {2 m, ] c7 ]/ Y7 b% y
asm(" nop");
7 u* P; u$ v, y, q- X3 r7 a8 n4 t
( {& z6 J& e3 h* F9 Q& K$ T0 u
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 s5 W$ j1 |7 g F
}
$ i G3 q) q, s! F- @$ u
7 I. l. B( ^: o1 q% {2 J- w
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* i6 M, [, S7 x, {# s
//UARTprintf( "i=%d\n",i);
( x% |. E- ^+ ~2 g7 _2 }- a% K
//UARTprintf( "j=%d\n",j);
7 [' Q: X& k) R" P5 e
UARTPuts("Data mismatch in buffers.\n",-2);
" @- c2 r( ?; |
if (upp_interrupt_count == 2 && upp_error_count == 0)
) b" P; b4 @$ H# g
{
: R P; E6 z0 Y3 c" `- m
for (i = 0; i<upp_frame_size; i++)
0 ]/ A! X* C' g% }. T& @
{
- c/ V R6 i0 x( ^2 K& z
if (upp_buffer_a
!= upp_buffer_b
)
& c+ j9 Z9 U4 T* x: j5 E
{
1 u0 u" E: f1 D$ y8 q& z) y
upp_error_count++;
& `9 Q( E' H' {
}
, G* }, h/ @" Q4 V4 Z
}
" |! Y/ H- \$ p- ^* J: Q; h; e1 W
}
" i2 c: X* L2 \) k7 ]
4 O+ u+ O. K1 M
/* 报告通信结果*/
, C' P, U: R6 ]" a
if(upp_error_count != 0)
) a$ ~& }. w, P6 X
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- x* w- g9 e+ M
else
]- v8 S b) m+ h; f, ~
UARTPuts("uPP transfers complete!\n",-2);
8 C! O0 p! j$ o+ n n. O( K8 @' ^1 K
; i- {$ p# q" m y2 o& a' i) k) K
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: a$ H, b* t# E+ Q) ~
UARTGets(ch,2);
4 y- U9 h5 d: o$ P+ s$ G' L5 S: O
UARTPuts("\n", -2);
' d, d9 l# E( B( }' E
' m8 X( Z% {2 ?& [: B
if(ch[0] == 'y')
1 }% c- e1 f" t, h# {& w% F: [
{
9 z$ E5 o1 {) l" ?' D( ^; `. }
/*打印全部读到的数据*/
9 G% Y. R% a \. A: F4 C
for(i=0; i<upp_frame_size; )
' Y8 j* _" z1 B/ B. v* X' q
{
; o) K; n+ d$ x/ r
for(j=0; j<5; j++)
$ e* C% {& I: \# t! S4 D
{
" u# x5 u: R5 O' ^( V5 @
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, x! g9 ?( E7 g2 @, i+ {8 H+ H
i++;
9 h4 N5 O; }3 ~
//if(i >= 4096)
8 `2 b1 t( h f* z
// break;
! d. t* m# s! h% d8 p
, I f8 A& K6 _( x
}
. W3 `5 Y) l$ T% `4 L8 j9 ?
UARTPuts("\n",-2);
+ C$ r, o: |3 H; i$ ^% l
}
& _& \$ G+ a8 u, K C. O
}
1 W, Z5 ~; H( F1 P- s' O
_8 I1 F5 ~( d
}
" t8 G6 d3 d+ z8 p$ S
* q& C' j9 A3 d: Z
6 H( w2 |* f- \+ }" [- H
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 ]: ]% `% H0 T, n" Z& ^. d% N
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 y# E) v2 `, h, [, q$ Y& S
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4