嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# I9 V- e2 c" l
Void UPP_TASK(Void)
T' C6 O/ W' ^8 u7 T
{
1 O6 @+ _ M1 D& @
% O8 j0 }; |" V9 V6 w" V- t
int i,j,k,target_int_count=2;
6 ^, w$ G, m8 h
char ch[2];
7 H7 l( p" ~' i5 }- F8 S |
2 C6 F( @2 c; u8 a1 _
* \& t" {" o1 [% x
" j% N0 T8 g5 c' k( w6 T# s) ]
upp_interrupt_count = 0;
- P8 P! n& T# p5 L o8 b
upp_error_count = 0;
( m2 o* |2 ]+ U: R) H
. k9 \8 m! J5 R% G9 U. t
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 f1 _. w* T9 j7 c7 ~/ G8 u( `8 C7 I
// Initialize data buffers
1 o4 T4 ?4 P8 O) R( B
for (i = 0; i < upp_frame_size; i++)
. S6 _1 [: S& b( M2 H& s& C
{
4 |( J$ y$ c# T7 `: _( s2 S
upp_buffer_b
=i;
; y5 ], |: \6 b2 o$ G7 A
upp_buffer_a
= 0xDEAD;
' O) g, c8 @* d' z& s! j0 U
}
( D& I+ g( f! D! K" M
1 k- a. r$ `8 G: y
//for(i=0;i<1024;i++)
2 h) L+ n9 p, b6 x) W Z
// temp
=0;
3 u f8 Z# q! X" \
+ Q8 Y" A8 ?# | U5 e* D+ h' f
//UPPReset();
0 [' X% r" V- o! {
/*启动UPP DMA传输*/
( ^1 {9 ]4 U) R
UARTPuts("upp_prog_dma_i\n",-2);
% I, a" M3 O/ t7 Q L* J3 J
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: Y/ k$ ] l7 N" p/ A$ o
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 |4 v9 I* } u7 i8 y( O
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( ^8 a( I0 G9 y/ c, d% D
% I% B9 m6 N. a4 l" w! M
UARTPuts("upp_prog_dma_i\n",-2);
7 y* Z# U8 H L. t
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: r' M: x2 Y9 N" g/ r" k/ J3 r9 S, R
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% U/ _5 R3 z. G/ f% a& N* ?7 ]" U! N& R
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! e! o6 w, Y' i0 |% O$ b. i7 a* c) c
; ? d# h4 X- q) G( _# b$ @
/*等待UPP传输完毕*/
5 l0 X+ k( y, f7 F7 I/ Z# J0 Z
//i=0;
; S d5 B/ |7 a7 A/ h
//j=0;
! L7 u; W& m3 ~' Y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* `# f8 R7 ]7 H
{
( G+ }) B. }! |2 u+ C$ W
/* 测试UPP传输的同时操作普通DDR数据
5 m$ a; l0 p, u0 k
temp
=i;
, A8 `. S1 i$ O% {9 A! ]# j
i++;
4 K5 Y f1 p d3 o' Q& }6 p3 Z
if(i==1024)
) u- C* l! ~6 N0 Q' L- ?+ e
{
: @* `3 A. A4 u4 g5 |3 S5 a c
i=0;
# i' J: V# n( U& z
j++;
, U" A8 R5 O' y$ j3 H
}
3 y' S6 `3 v1 {) t8 E
*/
Y* Y! [0 y1 ~: b: ?
& `( a L9 ]5 {# t
asm(" nop");
, R" |$ w: W0 C; }4 N% y" V) ~; l( k4 ~
" r9 o9 i% r5 N/ R
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 J# m8 [3 H& y3 W3 c
}
, L9 u$ d7 [: Z; r5 @6 T! D8 l
% K* ]. x! U5 d! |; W) k
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, r) p) P0 u. o
//UARTprintf( "i=%d\n",i);
1 A* P5 a6 A. U4 J
//UARTprintf( "j=%d\n",j);
- _2 I- W; r9 ~2 f: j1 ^# m
UARTPuts("Data mismatch in buffers.\n",-2);
7 z: W4 M7 d5 C0 C: `! r
if (upp_interrupt_count == 2 && upp_error_count == 0)
# q4 U* g8 _ x- v4 o
{
( d8 ]1 o9 u. ?" O$ S, T1 c
for (i = 0; i<upp_frame_size; i++)
, @/ ?- z! C2 Y3 ^; W- k: l8 s
{
; J }* k; `: y$ |" {+ v
if (upp_buffer_a
!= upp_buffer_b
)
$ D4 S/ |% e" [, H" Y( [- ~# W @
{
- n9 e5 M% i* q
upp_error_count++;
8 E. z- p- k; q, m
}
- ]( e5 q8 [; S/ j2 P+ }
}
l8 a6 I# d- m5 A! D8 O, c9 K) c1 D
}
! z+ @1 e0 ^/ h; `, I' X7 o
- e- d9 `6 L( V3 U7 ]3 B/ d
/* 报告通信结果*/
" P; b$ n) |+ H) `* ~
if(upp_error_count != 0)
. `) i. F5 k5 n7 E
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ J7 V) K" S# B2 i3 C
else
8 I( f9 @" W! \" b
UARTPuts("uPP transfers complete!\n",-2);
: _2 D/ e; R$ Q! c3 u0 x& Z
# o& L: o( |- s
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& [. s7 _; U" S
UARTGets(ch,2);
* |7 v4 N; d0 j" F3 Y
UARTPuts("\n", -2);
: u/ |) Z- f5 x& i- J2 c
* g0 o- D' F2 F" R( }
if(ch[0] == 'y')
7 \, h4 y5 `" U( a. z; I/ @' I% q
{
0 Y) z7 A1 r& w
/*打印全部读到的数据*/
5 |* k. X X( B: w% i* R
for(i=0; i<upp_frame_size; )
- O7 W$ E' q: V
{
8 Q% Y9 x! M+ V# U
for(j=0; j<5; j++)
5 d8 i# s1 Z: X. }( b$ P! S6 w% ~+ k6 l1 S
{
( K* |8 A: q+ B* Z
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& B, j& Q# _/ P8 G+ v8 F# L- d: l
i++;
1 A9 @. Q. @$ l+ ~- |" b
//if(i >= 4096)
7 _( m& r; ~- |& b; M
// break;
3 r% L$ g$ Y. s) m' S1 V, L% B1 _; V0 I
7 p+ N( A0 p5 @- F6 H
}
. ~. S% i1 ~0 a f$ z5 Q
UARTPuts("\n",-2);
9 D8 e. ]8 o+ K; e- _7 g8 p# _
}
# ]8 {1 h' `% ^9 s$ k! N1 c
}
: C8 P/ M0 {! F
. a8 O! s( ^3 C$ z% ^
}
8 G- s- X, G7 x# k G7 U- R
- L9 G+ |$ V, c
9 z" Y a6 z5 P$ h& k0 Y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ C7 c+ M" D# C+ }+ H& R
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 y- p" U1 B& N7 W. D! i5 ?, F* w
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4