嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ W6 _' v3 ]2 n0 V
Void UPP_TASK(Void)
8 l6 b' B4 v5 j8 @- j: G7 r$ u8 s
{
1 J9 @! d8 n- F1 d0 U
) |6 ]7 _. I C% X+ C. V7 }
int i,j,k,target_int_count=2;
: @9 C, X8 }4 \: _
char ch[2];
7 Z) g2 } c, T: ^
' B7 o4 g% [. k" n: `1 b
, |) L& {4 b+ V# q6 c& z% X' V3 L
8 ?8 p3 e O* U) o
upp_interrupt_count = 0;
8 a) ]4 I9 k7 Y: }2 m2 i4 R! @
upp_error_count = 0;
8 x' J0 m3 |4 q" `; q; I! [
1 d4 `( O8 E. D9 x* f
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" C" E0 S, I/ D' D' d3 `" `
// Initialize data buffers
9 T A; i9 N- q4 M/ H2 Z6 j
for (i = 0; i < upp_frame_size; i++)
& g, Z- Z' N% D0 s4 L/ F* P; y
{
/ _% Z( F. Q8 J1 B5 Y8 A9 }/ ^7 B
upp_buffer_b
=i;
, R R( g0 G$ Q* L- e
upp_buffer_a
= 0xDEAD;
' C0 a" B- o" N" I
}
4 Y' f$ z% X8 R$ f
1 k; X' }6 X; s. r! u# ?" j
//for(i=0;i<1024;i++)
: `# D) L: _* O( a# c L
// temp
=0;
" _$ n3 V8 R$ U: x+ `
% {3 l9 H4 ?% Z1 y! p8 p6 r
//UPPReset();
' j- I, y0 C" G
/*启动UPP DMA传输*/
- T5 a- K4 _* N- i# F
UARTPuts("upp_prog_dma_i\n",-2);
. \% {! U& g. B6 W+ a" g* h+ j
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 j6 o$ ]5 u; c
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 @6 d! r3 r' Z- z9 J) l6 D4 l2 S
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 @1 H5 F6 t9 n* G
* V1 ^$ u; ~: x% p/ S1 ]* y5 \6 Z) x
UARTPuts("upp_prog_dma_i\n",-2);
* l3 {& h) m- F; I. V. F
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( p7 D, T7 `. z1 i& ^
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; V6 `( g/ T( Q9 @8 I1 P2 n; Q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 m% l5 ^( b9 w k9 z, i
3 u5 @& w& \7 k) H' a
/*等待UPP传输完毕*/
6 j: Z! ?+ m5 ]! V% v
//i=0;
6 ]" O! k* |" C/ ^4 j8 A
//j=0;
9 o1 M& z; v7 V0 [
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ g! H$ m8 E1 @
{
6 M( D9 W% l8 {, j3 T
/* 测试UPP传输的同时操作普通DDR数据
7 [9 V: T; y( G( w. I
temp
=i;
2 S( E, M7 }0 ]7 G% [. u8 o( R
i++;
) w; M M' ]* n- N0 g7 ]9 _! `
if(i==1024)
2 D8 ?# J* S& c1 |* K% I
{
3 X6 n- |; o% t! r; B
i=0;
% A. |& Z$ e' M& x
j++;
! v2 ~0 x; U/ b% y1 l# {3 ~) d
}
8 {/ u! A3 t' K' r6 ]3 ]; l
*/
% Q* _& A; Z" r* d+ R
+ ]1 v& ~, W8 h
asm(" nop");
0 r6 G$ _( U. ~8 W4 e
4 N7 Z1 U( N0 N4 d/ S! l1 [ o2 V
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- S$ f. s" m( T
}
$ Q! K1 J# n* ^( | j' N% P; v
e! Q: d u8 f, c2 k0 j
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; e$ s, G# m4 \8 b9 ]0 ?
//UARTprintf( "i=%d\n",i);
+ X$ l% D+ z6 k" j- [9 n
//UARTprintf( "j=%d\n",j);
# n0 b+ t- e# h9 I
UARTPuts("Data mismatch in buffers.\n",-2);
. |- Q L& y r- d0 p9 I
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 `& m0 }2 M" H) o
{
$ R' A/ E0 Y; |$ E
for (i = 0; i<upp_frame_size; i++)
& h2 n6 k) M* ]$ C- F) U
{
. g7 v+ `. q8 G) h+ _: D5 Q- ~
if (upp_buffer_a
!= upp_buffer_b
)
' s! M3 c- O Q* h6 \$ W" y0 S7 w
{
* [ Y" R; e4 N- r6 P! R, @
upp_error_count++;
' X3 F% s$ W9 ?( h
}
5 T8 o5 R! Q; p0 l( c& [/ _
}
" F# X r D2 N
}
% ^* B% Q2 D* O1 c) T
* p* [& ^( t. V2 f7 |' l- L
/* 报告通信结果*/
" a( ^; T) l, F H. M1 P% Y3 Y
if(upp_error_count != 0)
* p* A' B9 d1 Z/ i1 V; Q. b( }
UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 K, J5 P( p- o1 X8 v( b. W
else
+ X: V+ D: V% q: T0 T
UARTPuts("uPP transfers complete!\n",-2);
1 O- Q! G! `) Q8 ^) q
$ X4 B) A; S ~8 c" t5 ^7 `" E
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 T# x0 f' {/ ?% s
UARTGets(ch,2);
6 E1 `0 J2 l! X- K2 }* N( d( \8 i
UARTPuts("\n", -2);
! Q3 h. [3 u+ }5 x( k @+ p- g+ g
! k* ^3 _" a" [' G5 a
if(ch[0] == 'y')
& E0 q. u% f, k# Y4 Y* a3 n
{
- \" ?$ l% T$ s
/*打印全部读到的数据*/
( \1 P# |, y8 J4 a" |
for(i=0; i<upp_frame_size; )
8 i2 U" J/ M8 c* {) M0 e$ G
{
% ?# H3 Y. G$ K9 r% f7 Q
for(j=0; j<5; j++)
8 k- r) p4 ~: s3 v+ e- j* y% o
{
`+ G5 ?- a9 b$ I8 c4 ^! [# H
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ C( g9 u- D( q! w
i++;
! U0 K& d" ~- M0 s# V1 c
//if(i >= 4096)
: W0 c- ]) e# B% {8 b; l
// break;
3 U: f, X& a4 O
& A7 W& ?/ D& Y" O- z% n$ J6 A3 C
}
1 m+ F( s, F; M0 n
UARTPuts("\n",-2);
) y' U3 C6 r; [* B5 G' s
}
; f R2 f, `1 k+ [7 \
}
P7 }$ b$ s. ^8 L: x/ u' c
, |4 l ?6 y: W/ a) I6 u2 @
}
- H% J2 S( o% A8 i+ x/ s* ^' o
- |: I9 j% f6 Q/ H& i
) _* W7 Q4 v) y. S
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. v+ O% y7 C J, r
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ T- z. }+ r: l3 n2 A o
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4