嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& b1 J+ P8 @, E& c' Y; V2 F
Void UPP_TASK(Void)
8 `; L! t$ |) s/ a) d1 A
{
2 A0 E- j% Y( S, s) L2 r) {, e' b
0 H/ B. |8 Z, `% Z: ~7 c. w
int i,j,k,target_int_count=2;
8 |( ~. |) l8 {4 @) k
char ch[2];
9 t% U4 w; e9 l5 y4 p% m
7 I# f* Q+ Y# E3 n. _6 R: A2 n
2 A* X2 z0 @) @) _$ c+ b7 P
2 P2 T A U0 q$ g
upp_interrupt_count = 0;
' _4 @. J, B0 S5 c
upp_error_count = 0;
8 t+ [5 Q# j4 I- m# k
2 W9 z7 U F$ n9 k# v5 V- j
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: B" a# k" K: h" T0 M$ e
// Initialize data buffers
9 v: L+ c% ^! i: C1 s, }
for (i = 0; i < upp_frame_size; i++)
* i1 X p. M' P1 H! J& j' [
{
, d0 M7 [* ~! V5 X% F8 y
upp_buffer_b
=i;
4 p) z4 X& j$ Y/ x8 F5 U* q
upp_buffer_a
= 0xDEAD;
7 i5 U a- p3 |; F$ n, O0 C+ I
}
) W3 J4 K+ T) g% i4 F5 k0 K
0 b$ N& j1 h% q9 x2 W
//for(i=0;i<1024;i++)
( D1 }8 v7 {+ h4 N( x
// temp
=0;
8 L$ T! b2 n6 ]0 F, y, k
8 k; D( p# f. a
//UPPReset();
8 a- r" ?0 \+ `
/*启动UPP DMA传输*/
, Z( F; w7 r; s* P6 e- m( L
UARTPuts("upp_prog_dma_i\n",-2);
/ ~, ?; B4 p- g! G
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 z9 b2 P2 e; V9 b$ W. J
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. X Q% `4 K( s( u) P8 G
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 |% g2 w$ A' [+ k: l" S- j: _
4 B+ p+ @: g7 T# h
UARTPuts("upp_prog_dma_i\n",-2);
/ g# X9 i- u' J1 N
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 I0 E& o6 F1 ~# ]3 l. e; A; s
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) W* J: ^$ n1 F9 s
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 e2 R& R* j- i, }
2 l/ Y, m0 Q& R" |
/*等待UPP传输完毕*/
5 t- {# J3 A# A" z
//i=0;
9 H* M/ Y1 A# N/ R" e# G2 R. U3 ~
//j=0;
% ~4 q2 \$ r* u i; ]
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 q$ y9 [7 w0 W8 H$ _
{
( h% e/ Y: J& F
/* 测试UPP传输的同时操作普通DDR数据
0 M. l2 d% a& A4 l1 O: s
temp
=i;
* C5 J4 M/ z% N/ z# R
i++;
& w: d8 u! W$ M5 C. @* Z
if(i==1024)
L2 e- b; C1 K5 J, @7 r3 I' V% u
{
1 A; a8 y7 h! E
i=0;
3 S( @$ X" o3 L* g3 h# X* ^9 [! m
j++;
+ I R0 H) C$ k0 q1 H" `
}
/ v9 P5 h7 N; j) E# l5 v+ J1 E6 k6 d
*/
6 M$ [/ ]) Q7 M. q8 K& \
R' k2 I' t) u4 y/ O) Y$ y" f( p
asm(" nop");
, m$ o# }8 ^, \+ q7 r
2 S) G8 Q# ?3 X
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ L4 U7 }2 e! x
}
+ [1 p# i; e& i4 Z' K
2 C; S w" u- O2 p3 _
/*检查UPP传输的数据是否正确 (loopback modes only)*/
3 A( s1 h, u, @: t% p8 G8 z% `2 ~
//UARTprintf( "i=%d\n",i);
) u( L1 p% ^/ U
//UARTprintf( "j=%d\n",j);
4 d& P4 P' `7 G$ x/ }9 R8 ~( s
UARTPuts("Data mismatch in buffers.\n",-2);
7 h0 B8 ]5 t! B: _2 ?
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 Q9 D# E9 }2 P" h( d& H7 L( n8 }
{
; h2 v' K# i' ?# r8 c2 q, T; X
for (i = 0; i<upp_frame_size; i++)
& j l4 ~9 H* d1 j- O- ]& \
{
+ W% T& ^9 z( g' {
if (upp_buffer_a
!= upp_buffer_b
)
6 b7 U2 }7 J. _3 x$ E3 g
{
) k7 l; A* t: W$ l- q- ? G
upp_error_count++;
/ O0 r) ^0 u" j0 ~
}
2 n. F w( e- D: M9 j
}
2 h- r: P; \* {! a- T
}
; e2 v( S& y5 w# l8 s) l
E+ ^% ?3 M2 N! i- R, u ?
/* 报告通信结果*/
- |' ?7 M% {3 K9 r
if(upp_error_count != 0)
/ r9 Q F7 `% z4 i+ H3 l
UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 K }/ U$ N1 U1 |3 ^, w
else
4 J% ]# }" X, N& A! o8 T: X
UARTPuts("uPP transfers complete!\n",-2);
2 d" D7 ]6 S) I P! m
% R; L5 ?7 L H$ z$ t- Y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- K* [7 r) p7 o; N: h
UARTGets(ch,2);
- o- w$ R8 a' Z8 G2 h) h; H
UARTPuts("\n", -2);
8 U2 z1 r \8 E! w/ a
7 b B1 s' G1 m
if(ch[0] == 'y')
# e/ l1 u- r+ l4 s4 \8 Z1 t* `$ A
{
5 v6 n# z5 W2 ~. t6 ^" x
/*打印全部读到的数据*/
5 w" t/ u) h! }; P" |3 v S5 R
for(i=0; i<upp_frame_size; )
5 b1 T" p9 A- S& z0 t! n1 R
{
: k* u6 M0 q6 p3 I h! ?
for(j=0; j<5; j++)
7 u* i: Z7 n4 h. l, r' A6 o
{
% ?$ P& q' j, r, I) H0 K J' ~
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 U* ~* u c, l9 h N- U7 m
i++;
% F7 b9 M" f! H- _$ Q
//if(i >= 4096)
/ ]4 [ G9 @6 E) ^! D2 P
// break;
& {" E( R9 k) @. \9 z% _
: x: E" r! n0 E8 V/ u1 l$ x, ?8 J
}
6 c8 T8 p; i( _
UARTPuts("\n",-2);
) C! f. e. z" g5 D3 ~
}
& U) Z. l9 f" ?" ?# a' E1 N
}
* m- Y+ Q" G- J5 `% [4 J
* L4 o9 o# f: r$ z
}
5 r! ~; x$ O) ~' g+ V# Y
2 c4 d% O9 d/ {+ m7 D W
( P* v3 u) O, ]' b% F
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ L$ I& W7 W, o, l" o" P& t) L" R
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 D# j6 g) y7 b1 v
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4