嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
|& b% I% O/ e+ y- x* g( M$ I
Void UPP_TASK(Void)
6 _) n. {6 c# g% d7 B: n Y2 [' ^
{
& V: n# o) a6 ]
: _9 k1 O! r0 ]. q1 _% O2 j
int i,j,k,target_int_count=2;
6 _6 v F6 g( h; U2 g3 v
char ch[2];
! Q1 F# [: _0 K0 j% u3 Q& Z. y
2 L7 Y& \; k6 J
8 m+ Y( S4 A) S
1 h4 q* A5 L+ t: E7 w/ C; m
upp_interrupt_count = 0;
3 S8 J% ?" w5 _4 H3 h
upp_error_count = 0;
& }/ r; s1 J; l6 _
! J( C7 [2 T, ^0 H1 z, _
UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 ^. S8 g3 B5 L! {: n
// Initialize data buffers
- E0 n; S$ h/ X0 y% L
for (i = 0; i < upp_frame_size; i++)
! s. R' z* d+ g+ X
{
! z+ ^ G$ t8 a- P2 J, t) J
upp_buffer_b
=i;
0 i% P3 D. w0 m0 o/ J& _! `) o" c
upp_buffer_a
= 0xDEAD;
- [+ A5 ^3 n. q3 {4 h2 ^( r
}
, D n# i5 T) M5 }7 G* i& O
' E& s0 ~7 o- c V5 w
//for(i=0;i<1024;i++)
* W% G+ B0 f) S
// temp
=0;
5 k5 B* K/ m. t. ~
% n Q/ `4 Z- [+ g# E( q
//UPPReset();
' {, b- \- ], M5 h6 t9 t# t
/*启动UPP DMA传输*/
E m/ w" t5 D$ H( ?3 `& k
UARTPuts("upp_prog_dma_i\n",-2);
+ L: B% _; F$ X! J# H
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 H' d( K2 e; F' L! K/ T+ M0 _
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" k0 w$ W) [. x9 x+ o% r) [. Z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' N" _: E {7 Z6 ]5 D, X( v
E! G7 Q) Y1 B J- p, M
UARTPuts("upp_prog_dma_i\n",-2);
- K3 G# r( S( Q, K* _& `8 ^
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ x" c# e( V3 I% |3 e- R
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ Q0 `) I' Y! S' C P; v4 z% }
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 E" G+ D6 ]/ n
4 ]/ o" [* a0 T7 a3 C) P3 K$ k \
/*等待UPP传输完毕*/
( |5 L4 W. ]% D8 y/ E
//i=0;
4 b5 B; p& F* }
//j=0;
" t3 n0 g9 n! X9 i+ R
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 u* W. b7 v5 n$ E; Y8 \
{
2 v& g F8 Y9 B9 E( \7 X
/* 测试UPP传输的同时操作普通DDR数据
# K5 t" f" G* ^; W+ |) ]
temp
=i;
1 P& D' _, t1 Z, J: _
i++;
& v. R8 d) F; c' C
if(i==1024)
* [/ L# N4 X: d' @ A8 |* J
{
) T( L# o, { R/ ?+ s3 z
i=0;
1 ?# l! P* @9 }4 H% j
j++;
( H$ o) Z4 [1 U3 [. v- b8 B
}
) N" a9 ], T* w( |
*/
' | N" t7 l, H
3 Z2 p$ H4 N2 D# W9 F% H2 M! K9 D
asm(" nop");
' X+ {( A* e" A" N+ ~$ J8 ~
2 R p3 @7 Q7 B) [: f
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ A3 O) S! s, Z# H4 b" f/ s
}
% @( [3 |5 L# p
. A: c# U: a$ }, i* f
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( ~, i2 m2 G6 V: L
//UARTprintf( "i=%d\n",i);
9 g) @: K% Q6 V& c3 @. U
//UARTprintf( "j=%d\n",j);
. }) ?9 V1 T' x9 O) i6 C) p7 h
UARTPuts("Data mismatch in buffers.\n",-2);
5 Z- m2 u, z9 |( E7 H: g
if (upp_interrupt_count == 2 && upp_error_count == 0)
3 ?+ ~: t/ c, o# v9 e( ?
{
& Y( t# y, g8 r
for (i = 0; i<upp_frame_size; i++)
& k( u# s1 E3 ?& P8 E d$ ]
{
4 x, p7 [) x8 y# X* @: D* V) d
if (upp_buffer_a
!= upp_buffer_b
)
5 S1 }2 \; e. e( i) A
{
3 p8 W" ]$ C# z7 m
upp_error_count++;
% d8 z% ^+ _! U4 m5 r+ U# v
}
5 u3 D! c" o/ G
}
4 i) }% } n/ E- d# Q
}
. D$ r$ u/ }& @4 P# p7 A/ A5 w- l' M. f
- ^1 \ ]% b8 o( Z' C
/* 报告通信结果*/
7 R9 ^9 _6 m# `! z
if(upp_error_count != 0)
/ t8 X, l9 F" }8 Q$ p
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( ]( T& t2 `6 r& @9 y3 V7 x
else
5 T* y1 J; q& F1 r: Y
UARTPuts("uPP transfers complete!\n",-2);
4 i0 Y/ U3 O& y6 E- f2 A
, `' d* z* C3 F, F" a
UARTPuts("Do you want to print all the data?(y/n) ",-2);
# Z5 I7 U! X; A! q
UARTGets(ch,2);
D3 b4 x0 H5 F: h( E& L
UARTPuts("\n", -2);
3 D9 D1 k" F B/ c8 k" T0 V
2 F0 G! j( }' i2 o; e. F
if(ch[0] == 'y')
8 l" ~ `8 y& ]
{
2 c* Z" b0 ]1 |2 Q
/*打印全部读到的数据*/
) E, R. o; H* ~0 t
for(i=0; i<upp_frame_size; )
2 ~7 m& A, I6 k: o" I
{
- |. A. c' {# q& A/ [1 O, C6 k. o: W) R
for(j=0; j<5; j++)
D( `9 ~# F9 E, ?" d0 B' S
{
. T$ n2 w* e8 k3 j) d( ~3 }! X; P
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
% \9 G, k/ q; @" J% z
i++;
; b: l' f( u+ q$ e8 r, Y2 n( l
//if(i >= 4096)
* |/ F; B/ g- t: @
// break;
* X* d0 V. a* @4 a1 j. O( [1 E4 r
9 ~; ?' M1 R1 V9 k2 B% q- ^* h
}
9 [/ i0 M" p8 r/ W0 C: Y( i
UARTPuts("\n",-2);
' @- J2 T* F0 E7 C- d3 B) Y
}
, A& F7 v% Z. k8 d- S' h
}
8 i R* j$ B$ R' r
( C, s4 x/ A, p
}
' ^8 j8 p% Z5 f: }1 F
0 p) R" c/ e# z" r, A2 p
7 A8 B6 K4 X: k+ ^. m# j
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! N4 ]& [4 q& B8 `% O' C
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 a @+ t; q3 s& H
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4