嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& v' W) j5 C5 g# e5 O7 Y1 D& W5 }
Void UPP_TASK(Void)
& x4 |$ j! i$ G! p
{
5 b3 C4 \) M! d" U
, Z, U, v# q* m9 C! V" [3 Q
int i,j,k,target_int_count=2;
& o1 a) H, c; x1 a+ G( G
char ch[2];
# z1 t6 ?! P3 N( `. q
& d7 _$ \7 P$ j3 R/ v8 M$ s
' w8 X2 y6 N- M# R+ ^9 b# {
h; c" d! W5 W5 B! w; P
upp_interrupt_count = 0;
# Q( n, h3 Q- v0 [' c
upp_error_count = 0;
9 C2 {. K% }$ s' K
8 V" O: |/ {1 |$ C+ B* m- Q% f
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 p' X' R6 S2 ~- q& [
// Initialize data buffers
7 {8 t# B, N) a, p
for (i = 0; i < upp_frame_size; i++)
! s& v: G2 O( `$ o
{
+ R. V7 l% `$ ]6 l0 Q. L& o( i% T
upp_buffer_b
=i;
% Z8 O2 M3 `+ a+ c, O: _
upp_buffer_a
= 0xDEAD;
" P9 v1 g1 K2 ]2 h) s6 I- z
}
# ~) o* J1 k2 t; Q- K, z
+ e0 P) x- O, F: h8 z2 Q k
//for(i=0;i<1024;i++)
2 l& c9 S- |4 T( l# V
// temp
=0;
7 H( _( v' x B) N' R& h
9 u; Y" q) r( ^( P
//UPPReset();
9 F! \4 T. k" b9 `0 b
/*启动UPP DMA传输*/
3 D6 w; A$ \9 V; f( ^- @) X2 n
UARTPuts("upp_prog_dma_i\n",-2);
7 ~+ K" s* m# P: T
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 F, ~" t7 a/ }( Y1 u
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ n% l" |8 V0 P# h
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 Z) q( }% @5 t9 @3 c% W, `0 G
' g( k7 k- u' o9 d
UARTPuts("upp_prog_dma_i\n",-2);
% N' x& M/ p: y8 c: n( S
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- h% b$ ^/ f, [- u
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& v, ~. ?3 {8 \6 F- f
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( ?0 u& z# z. t9 Q: [
/ o% z9 o8 V% G I- h2 T
/*等待UPP传输完毕*/
( {' [! U, Z) U3 X1 w0 X
//i=0;
" i& z9 I6 L/ l0 N9 J1 A+ P& p
//j=0;
A3 P! v. ?; N2 X, V6 I) x
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( z+ v0 S9 o0 M! I
{
' D* t1 p/ Z5 L. F# z7 Q; t
/* 测试UPP传输的同时操作普通DDR数据
, ~8 l7 f8 M. g8 S. e( F: J5 ~
temp
=i;
. s0 E" m- P# ^- {* W
i++;
: _4 T( p( y( h5 z2 ]3 K D; ~
if(i==1024)
# D; @8 [% c6 g v' C6 x2 j! p6 w
{
8 {: I; l5 u( ]3 Z) t9 o: W
i=0;
$ W% O) r' f# c8 G$ e- `
j++;
4 p! i& [; o- i! S' l% x1 s6 Q
}
# ?* W3 K C% Q" s
*/
5 z! v/ u, c _& F( N
: a( |, s4 x+ i
asm(" nop");
0 y1 \3 z. t/ R( S# ?8 h- f
: }- \* F$ ^+ y# X) @6 @0 Q! r0 q
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ B; [. A7 c$ e4 s, n
}
. c- u* ^) W5 s/ z5 ^
' s9 h6 q% {1 |/ O
/*检查UPP传输的数据是否正确 (loopback modes only)*/
/ \8 W- F$ `3 p- q" ~( J
//UARTprintf( "i=%d\n",i);
& W2 M# }9 e& x. l0 x! e# b0 A0 n0 u
//UARTprintf( "j=%d\n",j);
/ u6 t5 U& s4 P
UARTPuts("Data mismatch in buffers.\n",-2);
+ T9 D5 w5 h1 U3 z% e3 Q% w4 {' I
if (upp_interrupt_count == 2 && upp_error_count == 0)
) o- S7 k" p8 R7 ^
{
4 ^) u9 d% ^- z
for (i = 0; i<upp_frame_size; i++)
6 W7 V+ M5 [+ O
{
) W2 x/ V/ O# W: F4 M; j+ h" ?2 U
if (upp_buffer_a
!= upp_buffer_b
)
8 l8 o7 V1 l* S ~) O6 I: Q' K& @
{
5 \) ]$ h( E6 H( a# \2 A) ~$ `% G
upp_error_count++;
! g' W+ i$ G" }. G( p$ m% ~. {
}
9 W3 T1 B7 ^- P3 e+ F Y0 {
}
$ G/ p* c: H: C2 N% \& f3 x
}
) M. v+ T+ o# y- y: H8 O
! Y/ N: F. b) f( O/ W* g
/* 报告通信结果*/
8 U; D9 t3 e( [' e
if(upp_error_count != 0)
/ z5 V0 _1 m C1 B) }
UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 v& ?" R) d+ P! b2 R# E
else
( u0 K I5 g+ q" H/ V
UARTPuts("uPP transfers complete!\n",-2);
% u, `: f* f' x2 q: N- J- L
( P u" W& G9 L2 D' s- t4 r
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ b& n5 v9 G$ B/ ]! k0 _
UARTGets(ch,2);
9 Y6 N: M* u5 x# O" U; f$ ]$ p
UARTPuts("\n", -2);
. @ O" ?3 ?0 c/ @* [2 x/ T! ^
* {7 d" `3 I' F% \% s
if(ch[0] == 'y')
/ f, u, W; m6 N$ P; J e
{
, ~0 p2 I! [2 G8 j0 {
/*打印全部读到的数据*/
! Y2 r, G; F$ j1 t
for(i=0; i<upp_frame_size; )
3 g& v9 Z* T9 T8 E" H2 _6 v3 ?
{
" L5 \) j, d' L$ z% {# l$ m
for(j=0; j<5; j++)
) b o! p# s( }6 M- T0 S
{
- B; h0 }! ]' l6 R* @+ i' j
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 n2 A* t' Z. L! E+ K* W
i++;
. O( p6 g# g, y% o* B
//if(i >= 4096)
z. G$ U1 K! r, r8 z9 M
// break;
# D2 e. v+ Z* R) w
6 e( M% H# o: U. `6 m! D6 m# c
}
, }0 `$ x$ Y; N5 I, |
UARTPuts("\n",-2);
1 n" @ L6 N" ] r
}
4 }% A8 a/ p2 y# k% |
}
$ ?% ^, E& W( x6 S4 b
* G7 H- L! h1 c* v
}
/ m9 l; S6 s \, v0 g ^! F
( P# \4 u t' O# ^7 o6 O0 D
1 A% k! C8 `. k5 u0 ^) b ~- P
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ m2 j+ h, W% ^. P2 b
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. H) @" a6 m" m3 M$ U
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4