嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
M: `( v' d9 l7 E1 X% b
Void UPP_TASK(Void)
/ W7 J* P& M8 g' b1 L) _; k
{
( j0 R# {/ Z3 n
' {+ g. _, h2 \, R. m2 e( i
int i,j,k,target_int_count=2;
% V% {/ p( l/ j" z4 Q
char ch[2];
! B7 b) k3 f+ d- f- I" V# E' s
" W6 U/ S3 U/ K, h* \" j
; E. o- E: D9 `) P: ?6 R
% w' C9 f* V% m4 d; {
upp_interrupt_count = 0;
5 |/ @5 E# X: t5 K7 [* E
upp_error_count = 0;
|: n* i) V5 D5 e3 p6 O0 I0 u3 p
4 e( B" s, c. K) C# z8 y5 g' }4 _
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ F7 ? ~2 w3 F) ?3 p
// Initialize data buffers
" P. m0 f# ^* b: T- U' v
for (i = 0; i < upp_frame_size; i++)
* D* q/ W* s0 Z; Y* k2 g
{
$ d( \7 @+ I6 J( m9 A" O
upp_buffer_b
=i;
2 Q5 _% q+ ]3 z" w- w) ?9 D
upp_buffer_a
= 0xDEAD;
' ~; q: z3 N& P; R. e/ U
}
9 D Y- A& K& D, t U& P" {
) M- U/ g) N9 W( M: f, N
//for(i=0;i<1024;i++)
. K0 H+ V8 U- M/ v B# o* [
// temp
=0;
5 \- c: `* s8 A# x
# ]5 s) W7 G: z( }' H, @: V
//UPPReset();
; ?- m l0 l9 q8 h# o% G2 c% R
/*启动UPP DMA传输*/
, h/ x+ o3 ~3 f! z7 C+ @
UARTPuts("upp_prog_dma_i\n",-2);
3 q, e# b, g: U
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: A& B5 i3 |+ T) M; K" G
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 ?. ~) [ T) {$ J! `
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# U% m$ _9 v! X, `/ v. K
6 k ]! K* i7 C* H( w; L4 T( d
UARTPuts("upp_prog_dma_i\n",-2);
7 j0 o" ]* `1 y. H8 S3 @
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. ?( D' M% z0 X+ u' w9 K2 ~0 Z2 V
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" V! ^. v R: r. c. K
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% T& X& b3 {, Y( u3 g1 r3 i, V8 ?6 k
, C1 I; f2 l( T' a
/*等待UPP传输完毕*/
4 x7 o# J5 n4 ~4 K, s; G# U
//i=0;
% X* K$ l4 A- s D' |8 m
//j=0;
8 n) Y# F/ q; b c; E& o6 W
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 y' x, z, }% c9 o' l
{
) |. O1 u$ `. E; [) U
/* 测试UPP传输的同时操作普通DDR数据
; T N9 f$ k7 {, ^; A; C
temp
=i;
+ ]' n# j0 j# z
i++;
- ^7 [5 j% R/ ~0 y5 O7 e. x) p
if(i==1024)
0 ?0 W+ E, g5 G2 I9 |
{
. C6 J: R( x% A
i=0;
f8 z0 ?( V! }
j++;
# T: P# ^: ^) m2 J2 C1 y
}
* A0 ]* }3 `2 W
*/
8 Z7 E& q* h( y
; S) {) H y4 q/ J5 F2 X, t
asm(" nop");
+ T0 Y% ~0 y( V9 r$ ~
' b4 h' `6 v' ` T7 x
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 ] m6 {: P5 F- X( `* V: I
}
: W- U1 ?& [7 O* F9 g1 t3 h6 a
9 \1 ~6 t. d. Z, k
/*检查UPP传输的数据是否正确 (loopback modes only)*/
B7 F( A# J4 c5 I# n* z
//UARTprintf( "i=%d\n",i);
; B7 L8 D' W# c7 f3 ?% I, O: ]
//UARTprintf( "j=%d\n",j);
, s/ ]+ \1 c: k7 q2 D |1 M
UARTPuts("Data mismatch in buffers.\n",-2);
8 Z, b! \5 T' [% X$ \" C) s7 R
if (upp_interrupt_count == 2 && upp_error_count == 0)
* d. T$ a" |' D
{
; H1 i8 k* @' o& r" c) U. N
for (i = 0; i<upp_frame_size; i++)
7 T! {6 _ z- @+ h( _0 Q1 @
{
3 T+ A6 W/ y/ [) `$ B; W
if (upp_buffer_a
!= upp_buffer_b
)
0 Y( l! P) ^, `' u" t
{
7 n0 b7 D4 G0 F( h) h" e0 |
upp_error_count++;
: a- o& k7 R e, A
}
! K' l1 F* N$ n7 ~; z
}
- d, I* X% t* z* U
}
( x: {. g9 s1 |
1 P0 W$ X4 Z% M0 w0 l% J
/* 报告通信结果*/
, {4 ]# A) ~ ~9 l) |! P q
if(upp_error_count != 0)
, u. g* E) ~' ^2 {
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; H. C% d' V' S- C1 M8 i! F) g
else
1 L$ L" ^% L, R+ l
UARTPuts("uPP transfers complete!\n",-2);
" |$ U: ` u. e
7 ] `0 c8 C3 D; [2 b( u! U$ o- L6 S
UARTPuts("Do you want to print all the data?(y/n) ",-2);
3 u2 S+ x( P" n4 z' z. a
UARTGets(ch,2);
1 h1 I" O% s+ I+ i, P+ a1 ^7 M
UARTPuts("\n", -2);
+ q& e; b6 ^6 e* s
9 E% `$ A; u) u. _6 J) \. b
if(ch[0] == 'y')
( ?' A5 T2 X3 T* u/ @% F9 S) w+ H
{
3 Y& I k: }( R7 _5 c
/*打印全部读到的数据*/
, U. N3 u# t$ J
for(i=0; i<upp_frame_size; )
- a: K! x- o% P! c& M
{
- c% ~( K E" T6 \4 W* B" B
for(j=0; j<5; j++)
# q: V6 B" C& e F R9 N- ^" Y
{
* N( l0 {0 g5 C, H4 J5 v( R( C
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, b7 W2 o. N) p9 {9 Y
i++;
h2 l' [( U; ?4 B. \! N4 Y! x
//if(i >= 4096)
4 E7 _; x5 L8 ]8 w- U" p* D
// break;
% p% t q, R5 f! ^1 z6 `
- e) z# {' \+ ]* Y
}
' Z! P+ P8 Z6 f7 |, ]
UARTPuts("\n",-2);
, _5 s6 B6 k8 M- @1 ~1 c: a6 y
}
8 u3 h+ D2 ^0 H# d3 B
}
% Q$ g9 S7 n& Y! y( i& {2 p/ j! R
: F6 n5 b/ S5 |+ n
}
1 {( q( G; v- b( d5 w+ R
- q4 s" R. I2 D2 e/ x; W: E
( f- r+ Y2 _, y9 U' L
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% _% o5 g4 w! ~( Y5 V# x x a
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ H6 ~) x/ `8 O4 d/ K/ S% F' ~
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4