嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- T4 z P% P1 d3 I9 ?
Void UPP_TASK(Void)
& a7 y" E0 w3 ^) E/ B# S
{
9 ?$ I3 S b$ f6 z" h
7 o* F0 P+ Y9 c; H6 M
int i,j,k,target_int_count=2;
$ y/ K2 n" J; D$ Z
char ch[2];
' P. L, Z I- a
" |& t; ?2 Q. y
6 r9 g' x% ^3 Y+ ?
9 K$ O8 g* Z% m# Q( L3 C5 c" f2 x
upp_interrupt_count = 0;
8 K! ~, \* Y! I: `, _" c
upp_error_count = 0;
1 a, N4 I- u- S0 E" |6 i1 I
2 N5 v9 c/ K) r8 T; y4 j! a- Y
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, {' j& P. |* }# G% X$ f
// Initialize data buffers
3 m j! c1 G% l# T
for (i = 0; i < upp_frame_size; i++)
}; G$ e6 S* A& |* T$ i& I
{
' |# {9 K" F( s4 u
upp_buffer_b
=i;
% S3 N' ^! h4 R' J; m) l
upp_buffer_a
= 0xDEAD;
7 t- w/ ~" K2 t: T) V: n# `
}
2 W3 X# K& I/ Z
6 R% C$ @- z% [. P9 p
//for(i=0;i<1024;i++)
' S+ ~! [+ L) H6 U8 p
// temp
=0;
6 J( w3 ?0 D" ?3 Z0 K
. ?1 D0 V7 O" I1 W* c7 q- I4 [; m K" A
//UPPReset();
' `$ D. D2 R4 P) \% z5 i
/*启动UPP DMA传输*/
# O6 V' U! z+ |( h5 ?
UARTPuts("upp_prog_dma_i\n",-2);
: V8 b% L% r# Y7 ]- b
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
0 J% V" L& f, ^; `+ y* _
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 }8 ]& u9 R0 q9 A H _8 N
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: D9 Z* |1 Z5 F: V/ E2 p9 R
% _1 O; H# a) w( @3 d* @
UARTPuts("upp_prog_dma_i\n",-2);
2 H- ?' x3 H# [( o; f: N
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) \4 T! u! k& i5 S7 Z. O
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) ~3 m( M$ G. ^ Q0 ~
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ N. S6 v" l4 V6 O
3 A2 \6 I; y; ^% k* b5 Q8 X
/*等待UPP传输完毕*/
+ f- K: j* n9 j( r. ~
//i=0;
( ^1 [, x% H7 A* G7 _1 k( }! K9 H% i
//j=0;
7 O, Y4 k' r4 P3 K( K
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* D5 N6 s7 g! z O7 U' H
{
. {, v) E9 w$ X9 V+ e; p# ~
/* 测试UPP传输的同时操作普通DDR数据
, G0 H. E5 U& S# ]; M) A- ^: H
temp
=i;
) N" F1 h" n3 {7 p- J. i" h
i++;
+ t0 G' m0 F# T. ]% Y
if(i==1024)
% ]- s8 S& x8 C* g
{
: Y0 N- o- j, t: }: r
i=0;
3 q( L/ ^. o: H* b( v& k
j++;
+ ]) s5 ?. \" N1 o, t, {
}
1 W' N6 o }& i% H
*/
, d, v, d0 ^" e& o/ `1 ` v* k
8 i# t0 ]0 G2 T% i4 _! d2 \7 ~! s
asm(" nop");
) Y! f7 F8 w, A9 r- ~
6 U* }- \( U/ @3 Z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 V. b, \+ u- J, T- Z
}
' h$ J* Y+ r* ~
6 p, l( t) E& A1 ~" D9 i
/*检查UPP传输的数据是否正确 (loopback modes only)*/
! h/ m$ h" K( I- ]: Z4 k
//UARTprintf( "i=%d\n",i);
* Y% k' Y, y4 ~. D* T+ T; [
//UARTprintf( "j=%d\n",j);
+ ^$ V; z+ F! T1 u+ b
UARTPuts("Data mismatch in buffers.\n",-2);
* u i0 i. z* Z
if (upp_interrupt_count == 2 && upp_error_count == 0)
& a. Y$ } ]# j
{
1 O9 ^0 f* ~4 q3 L. P
for (i = 0; i<upp_frame_size; i++)
( o% H% z, x- l2 j2 _2 J7 D
{
1 X* N: @/ Y( E4 `0 E) l) X& R _
if (upp_buffer_a
!= upp_buffer_b
)
4 z! ?$ j) W5 E
{
* ~* t1 \; s% q! |4 t7 o1 k
upp_error_count++;
" x2 e2 ~- ]. {8 e0 Z& R
}
0 J9 b% a7 h$ w2 Z
}
( ^8 ^9 I+ R/ X& D, q# ^
}
! K. N) i M! u z: |* z
1 d, F. K) X }, [3 d. q( m2 C
/* 报告通信结果*/
' u! n0 F' ]8 E6 z, w
if(upp_error_count != 0)
9 f$ u5 u7 ]' Q: B
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- w: D% H6 C$ f
else
- ]* c5 l* @2 u. n, U
UARTPuts("uPP transfers complete!\n",-2);
3 l7 G% W. I- V* `# R
" o8 R$ r- |, Q- j- A* V
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% Q, Q8 r. r7 x& y
UARTGets(ch,2);
6 X5 X4 d- v# M8 w0 {& a: g
UARTPuts("\n", -2);
2 {% F8 y0 A* P* J3 O$ O
\4 b5 O$ j* M0 w- r
if(ch[0] == 'y')
/ O5 {9 S7 T+ M8 r7 F+ C
{
" N) z" S- S3 c. I
/*打印全部读到的数据*/
6 q& v- C% N$ D: q, A5 \
for(i=0; i<upp_frame_size; )
} n# Q0 p ?( G' _
{
" t) @* ~% p' t- j: r
for(j=0; j<5; j++)
2 A5 J B6 N0 M5 g9 W4 K
{
( g9 i9 e+ K1 b$ B. `
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 B7 x6 ~7 i0 |9 ?+ X. k
i++;
% g2 _0 v. q& s" t
//if(i >= 4096)
$ J4 Z L4 U& L( \6 x
// break;
4 n7 P$ i4 a9 @) ~' V/ v6 D, E
6 V: D( f1 c f5 T( T
}
8 i7 u; C7 i! Q; H' \; I: z
UARTPuts("\n",-2);
5 Z+ }4 E3 u; H7 u4 ^& g8 e- a' t
}
& u& l4 w8 u! p& _
}
/ ^ N4 t6 A+ c( |* Y( ]0 h* s
& H1 J* H1 a0 m$ q: y
}
! w- A: f8 i& P0 J3 I% M
. g9 j D* P" I- {" ~/ o
: U* E/ h' [0 O
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, S3 q! C* U0 D* f' n
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; ? j; C) w9 Q; c- x8 y4 p3 F; o
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4