嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) k$ G! s8 [2 r3 [3 `& f
Void UPP_TASK(Void)
) D$ b1 I r4 T6 O5 _/ q
{
8 @5 I6 Q9 c3 t O+ q1 J
: n7 B$ a( o! _$ ?3 v
int i,j,k,target_int_count=2;
8 y4 K! u- c& P8 u3 ^! ^$ e
char ch[2];
& {0 c, v$ D" b. D
5 D7 _6 N# N, v9 R+ h
# U2 `8 F4 G# E% r% ~
3 M& X5 W# z2 |: w( J4 Q
upp_interrupt_count = 0;
6 U0 f" g6 @7 j! y
upp_error_count = 0;
1 I9 R8 O0 ]8 ^
9 B8 ~0 w6 V3 S9 H! E2 O
UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 J/ E9 J2 N) T! s% T
// Initialize data buffers
+ U" T) s# Q/ m3 h
for (i = 0; i < upp_frame_size; i++)
0 o# S# r' W8 ^. B
{
6 M( @4 A. N P% |, [; f
upp_buffer_b
=i;
9 s A6 d5 F/ l% l2 B
upp_buffer_a
= 0xDEAD;
, o6 B3 F2 W; y2 G) w
}
! d5 b1 w5 Q( v/ b x4 K- q3 B
6 m; N! j+ I, B# U! g6 q1 b
//for(i=0;i<1024;i++)
! e8 X; a7 T' t& f
// temp
=0;
! s {4 ]5 ?' |6 M
- w! o; J/ Z9 ?; M7 `' G
//UPPReset();
/ x5 c3 V4 D( W( b5 q, ^
/*启动UPP DMA传输*/
1 @& d" O! O: I7 m/ ^0 P5 N
UARTPuts("upp_prog_dma_i\n",-2);
- j* s1 R+ c: w9 {
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ P; C3 b+ e$ \5 p) l
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 m% ?, g6 L' j
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. l; I% `( F- B2 j4 c% n7 [$ g/ p7 n
! b: |- `0 t5 `1 r- Z
UARTPuts("upp_prog_dma_i\n",-2);
& b0 U" E" @& V4 x0 C6 ^2 l+ K
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 x- Y4 H# d. q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! a+ |# H) x: v) |! a: \: e
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( `. l6 y$ X% o0 s8 w$ @1 b
5 ?* _) [4 P7 h5 O
/*等待UPP传输完毕*/
2 a8 T# o' c2 Y6 v
//i=0;
. w8 ^6 r; e8 o; \. ]' _6 `
//j=0;
/ B' v2 n X7 c' t% p" O" ^
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! b# W" M* w$ ] C1 J9 Q' `2 l% e
{
/ h; A* Y0 [8 [: N" U
/* 测试UPP传输的同时操作普通DDR数据
! t1 M* O! d, p3 e- R
temp
=i;
- m3 x7 X' Y3 ]. n
i++;
/ q, b; y3 b! v1 j9 H; N
if(i==1024)
; R3 u, z2 [. r+ |% p' `4 n# R
{
- d8 Y, Y" U A! V4 i
i=0;
3 g. B1 v: B; v1 o2 r
j++;
% F; n. n1 q. S3 b) |3 t
}
; W/ H* i+ S0 g/ W9 `! M& h! h0 E
*/
6 ?; u" s5 S! f% w! C' W) f: S
+ l4 g% k K3 Z- l. D
asm(" nop");
) w/ o/ J# a, y, D
9 y; ` b3 l) T) {) D. l* E* x
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 R2 O! r! E# Y$ V9 o. g( W
}
* F9 |7 T9 G1 E0 a! k
1 Y+ I2 z) l7 i0 Y# v D
/*检查UPP传输的数据是否正确 (loopback modes only)*/
u7 E- W4 a8 x& o1 p+ ^; }
//UARTprintf( "i=%d\n",i);
& ?4 ~7 }6 F9 p8 m, u: w
//UARTprintf( "j=%d\n",j);
' F5 f' @: \$ M6 z( n% m6 r
UARTPuts("Data mismatch in buffers.\n",-2);
: }7 h$ |9 q7 H! J+ S9 B) \
if (upp_interrupt_count == 2 && upp_error_count == 0)
3 D% i$ D2 v8 b
{
$ Z2 g- H# E! E9 ?
for (i = 0; i<upp_frame_size; i++)
+ d# [! `2 E- p
{
: o; F' L& s7 r9 J! r# a
if (upp_buffer_a
!= upp_buffer_b
)
7 y/ \. M4 t @% X2 [6 x: f {8 R
{
4 G* @+ a/ B4 u% v: n/ z$ p$ ]2 @
upp_error_count++;
2 g8 t4 a/ g* l6 j
}
. F8 }1 u) Q; x7 f& ]* X. i8 c
}
" m6 Y% z9 `$ F# U: C7 L
}
% Q# J3 Z& c3 Y
; [. C$ O; O( i
/* 报告通信结果*/
; e2 s) Z3 i; D4 A" |, D
if(upp_error_count != 0)
" C+ z, v4 R) T3 j) z% H. R: m( n- r
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ I$ H5 [& ~/ f5 \
else
$ o, I, n+ t5 w( B; W
UARTPuts("uPP transfers complete!\n",-2);
$ I1 R7 U1 D. Q) v u1 z7 B7 u- g
1 b" x* g, V2 b: T# v! T3 j9 Z
UARTPuts("Do you want to print all the data?(y/n) ",-2);
. K0 h: n4 ?9 ^; R7 Q* r
UARTGets(ch,2);
7 R5 S: B7 E4 K, F0 Q
UARTPuts("\n", -2);
/ m l# A4 p1 w+ J5 m, F8 Y
) b7 ^, o( y7 h5 C) y
if(ch[0] == 'y')
+ g- ~2 [6 |0 |5 I: E- s
{
0 f2 d4 G& @2 X2 i `5 B$ j
/*打印全部读到的数据*/
! y8 f5 }" W) `# w9 T' \
for(i=0; i<upp_frame_size; )
7 j: k8 D8 A b* f
{
; @( _: E# }: ?( Q
for(j=0; j<5; j++)
2 ^) l' T. B8 C6 A/ P
{
% F( _# T; }: l+ R% `: k
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
$ l6 t: g4 r/ I) G8 D
i++;
0 a: L9 P6 X+ x3 G; r
//if(i >= 4096)
6 f6 G2 V+ x n5 V. z4 Q
// break;
* z B1 c) n2 }1 w; k& r4 z
h# a# r0 ~- r7 O/ j- w
}
( V5 S" B8 C) S. l: x- m, Z
UARTPuts("\n",-2);
) v, K) L4 o( p. _% r; k; \# k0 d: v+ n
}
) M" i7 p* A8 @7 ?( ]2 V
}
" T% g2 p: F) P, v, l3 F# f
; l& r. S" x6 ~9 R |& Q5 a: K
}
7 _% {+ C( z& {) H8 [) u: r
' m* ?2 I3 _0 y( J8 w8 X
8 X* P9 U9 e- G) ^- P
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 B& G) U3 a$ n1 Z# h- u
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ T; |5 {/ P9 r6 O/ k I0 l" [
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4