嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: z8 y" J5 T2 H/ L
Void UPP_TASK(Void)
b. r% W# O0 X$ X
{
+ i1 ]' a6 v- M. M
; v8 O$ k# A! e4 q8 V* l* o6 R
int i,j,k,target_int_count=2;
1 M+ `) R) o8 G5 G s5 d5 b) M, C* p
char ch[2];
2 W4 ~4 Q" y& h9 {* z/ C
: u, l* U# D2 t$ L4 P- O
" e% H# Y; e% f& @, a
9 ~ q$ }0 D$ o" G: ^+ G: _' [ p
upp_interrupt_count = 0;
) B7 Y3 |8 x$ Q* ?) Y3 D
upp_error_count = 0;
6 A# V, \ K" M: ~+ S# q: d9 T7 \
7 _* j0 K. N. D' V" }& T/ y! H* V
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! e) i1 v, g1 @# }
// Initialize data buffers
' u9 M- o$ Y [1 S2 d. v _
for (i = 0; i < upp_frame_size; i++)
! A8 d3 s; y7 @+ D, I( B. w/ i
{
- X9 F9 U! Q& {/ U2 s
upp_buffer_b
=i;
% B4 R! \1 g$ k
upp_buffer_a
= 0xDEAD;
; j! w5 l7 L. ~
}
/ J1 [ w( f& x$ j
; \ X& {- S# Z
//for(i=0;i<1024;i++)
i. s7 E3 j$ s. M- e( e
// temp
=0;
( m3 }% J5 {% r$ ^
, W; @ S2 X, y2 N! S# H3 c+ I
//UPPReset();
+ M( {) S$ c1 V: \3 i" U6 `
/*启动UPP DMA传输*/
; d8 n! y. i u1 w
UARTPuts("upp_prog_dma_i\n",-2);
6 U7 h4 O# j3 ]
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 T+ A% l. F$ W4 R( p0 A0 F
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, T# U# a' A7 d& Z6 E) Y( Q1 l& B
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 d! i, p$ T& }
( `4 O" T0 K% X( P2 q N" F
UARTPuts("upp_prog_dma_i\n",-2);
8 I2 L, B; B4 D) e* z4 {7 F
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 ]9 x+ {% S$ O& ?6 g9 _5 O
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: {* v$ d y t
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, g% z4 b: }# p/ X- ~- ^2 P7 Q
* t, V5 J7 X: x2 d8 M- q) S0 A3 x
/*等待UPP传输完毕*/
' S% L% e2 T9 H4 a5 d% }* x
//i=0;
9 M2 f6 M. M2 j8 U& B; C
//j=0;
7 |- y9 \, ^$ H. N6 C
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 k( P0 q& F. T) d# v
{
: V3 C: ]" X/ Y! n, e# z+ G& y
/* 测试UPP传输的同时操作普通DDR数据
8 P8 w, G# g' g$ X; q2 v
temp
=i;
% a0 y; S0 F0 Y, ]5 Z( I
i++;
3 G s1 K* l* R9 m' O+ _
if(i==1024)
) t, ~3 _6 g. @* v
{
0 {- \# P* G- |
i=0;
4 w' Q% ^1 Z" A5 I+ T7 U$ w
j++;
v) q' h7 o) c
}
1 N* ^9 `0 p m1 C0 ]1 Y2 }: O: p
*/
$ L Y1 C3 e3 n
: Y- @0 `! `* Q" X- S& k
asm(" nop");
) D2 H* p0 A1 t! q* ~5 n/ |1 ^
& c! M# L* L4 e
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" X; B1 F; D. k$ ]% X) W! j. v0 G/ S
}
* I2 r1 S+ z) a6 w1 k$ ~. r w5 T8 e
3 B3 W+ D' v. l' Q: w& z
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 @5 q: H/ _* u: w6 L$ n5 ?
//UARTprintf( "i=%d\n",i);
R0 x+ W6 R2 N7 \
//UARTprintf( "j=%d\n",j);
% h: h1 u4 Q7 }9 c
UARTPuts("Data mismatch in buffers.\n",-2);
" b7 z0 r# C0 j& U6 G
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 l9 x5 C' C6 F& e) a# R; |4 D& b
{
8 X! O1 J: H$ t$ ]8 p+ H6 g' Q2 E
for (i = 0; i<upp_frame_size; i++)
9 C( g+ @- P4 X, n( R. k
{
8 j) l% q$ E: j
if (upp_buffer_a
!= upp_buffer_b
)
# s0 P; d6 K" t" x* G
{
/ b3 |4 Y7 C, [0 q9 M! g
upp_error_count++;
% ~, `! a5 Z+ j1 V6 X4 A- A( l! A
}
/ d! }! i/ o+ j# u( n t3 A: F( ~: R* ~
}
$ G. X& I5 X* X7 m2 ^. {3 R# C
}
4 O- K: y G- P+ l
3 c3 Y4 q+ d9 t* C' S
/* 报告通信结果*/
% Q4 F# `) I) t
if(upp_error_count != 0)
! S4 v, m' V9 j+ I
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 ~7 @7 l& m5 Z- x
else
4 D6 P% a8 g: \
UARTPuts("uPP transfers complete!\n",-2);
! v4 g! d* I3 P( c0 l/ Y. w
# `! w2 m0 b9 l! d/ [( X
UARTPuts("Do you want to print all the data?(y/n) ",-2);
. h( c5 c' u& K
UARTGets(ch,2);
$ [, t# j; F/ M9 O4 j
UARTPuts("\n", -2);
) s4 g9 ^; u1 j+ D2 ^
* R, s& ], Z7 [0 ^7 R
if(ch[0] == 'y')
8 `5 S3 Y& f8 S: B% W5 a
{
" J7 U( P. m$ y& l' L$ S
/*打印全部读到的数据*/
: `- w; B0 m: [% g6 P
for(i=0; i<upp_frame_size; )
; Y2 T; X& K: ~, i u
{
6 o# _! H$ E1 K. o
for(j=0; j<5; j++)
, i4 D2 `- d5 y: n$ C1 k% F/ u* g/ q
{
* Z9 a0 _4 f8 [/ H, x9 Y) `% s% I
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 F( j9 b0 [! P! C8 G
i++;
# @% h" ]% s! S' {
//if(i >= 4096)
/ x8 D( O2 k; U+ A/ Y8 ]
// break;
( g3 w3 e9 Y5 q% u, m. f
H2 E1 Q/ E! \9 W# k' @
}
" Z9 t4 f8 s. ?$ s7 L
UARTPuts("\n",-2);
- F2 b! }6 {7 o+ W) _
}
" \# g f6 j+ w; [
}
U- U# U' V; Y! F0 s9 f
, |" {+ c M- S, V
}
+ Y; A5 R6 D' ], L. m/ j7 a
1 H% Y. Z7 A: O% \$ Q
8 R2 {. X6 W% N6 c( T
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 h$ u# k0 ]* {9 b6 t0 m3 y& R6 w
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: H/ S0 r- U3 H
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4