嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! ]* T; y8 |: R2 y3 g
Void UPP_TASK(Void)
% l, O8 X9 l# E) p, _
{
: X- B6 H. X9 U! T
5 I' f2 I4 Y% Q) K( U
int i,j,k,target_int_count=2;
& x G/ A! v0 a) V* S7 s8 c) v8 V3 w# _
char ch[2];
! }+ `0 \; S) _4 j* N+ p! s" {+ ~
7 `$ l9 U/ @; w7 u& R$ ~' v
. v) ~' h+ c4 A9 p7 [3 ~9 b2 b& |
8 J8 t% o3 _$ A3 m$ {$ c4 x% M0 R
upp_interrupt_count = 0;
' p6 ]+ [6 ?5 X9 e
upp_error_count = 0;
5 Q# m, ^7 Y+ c( U
# C6 S; g6 L, D% X: x; w
UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 M" M3 L( X% o: F* Y, g) w
// Initialize data buffers
. v U6 x+ k/ J4 Q1 R, h8 X' T3 e
for (i = 0; i < upp_frame_size; i++)
( \( K, N0 v) y! w* v5 C; G
{
# Y) l# f7 x/ S; g: ^' J
upp_buffer_b
=i;
& ?! K) P. O) B! F
upp_buffer_a
= 0xDEAD;
+ B9 F7 O9 W$ l' l2 X3 ~2 E9 s6 E
}
/ x0 x; V2 q6 B4 D3 h: m: C% p
: _' Y0 @7 B6 `0 c$ L0 k$ ^
//for(i=0;i<1024;i++)
7 L2 d% Z. n' O( f% V( t9 Y
// temp
=0;
l( `- Q& G: c
: l; W" W2 \6 [
//UPPReset();
7 Q+ I4 V2 t/ ]9 E
/*启动UPP DMA传输*/
/ ~4 Q! t; }( g
UARTPuts("upp_prog_dma_i\n",-2);
7 W8 b3 F& e3 i" K$ y
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( }, Z- P' q0 |- | B8 j/ ^" Z! m N
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# B W2 L* [+ M; ]/ q' {0 P
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: y0 \3 \5 f4 @
( w! l7 Z2 N+ a! Z% j) ~3 l
UARTPuts("upp_prog_dma_i\n",-2);
$ Q9 L2 s8 f6 V5 P' P
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! o1 z+ f I i; w7 G6 ^ D
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 x! K8 y; H4 I0 s/ U& ^( r
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 S% }: f( f9 M2 G% ~% Q
4 y2 w. x+ u. v5 `+ a( F- G( a& u$ \
/*等待UPP传输完毕*/
/ Q( L- L3 f9 ~. i
//i=0;
! U9 \# B4 i' @9 }% o# T6 ^
//j=0;
: |( A$ Z! C0 d* ^& E/ Y) ?& i
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 ^4 J' D3 T# f3 H* o& \8 r* G
{
* M- \5 Y2 R$ ^& }6 }
/* 测试UPP传输的同时操作普通DDR数据
" q/ T! O, x6 U2 M" h& L
temp
=i;
) e5 O, t7 x6 e( s; X* i& ~
i++;
2 d2 V; p, I% [/ Z/ k
if(i==1024)
6 C) f# }, O& l
{
. I5 c% [. @6 G% e7 z; H
i=0;
7 G3 Y0 m" N* B0 K! [4 ^$ I+ r4 D% s
j++;
. l( E6 U, Q. K# N% S- h4 s* y
}
4 v" W, t5 R1 I9 p9 B r
*/
# Z0 G- m) P) d9 F8 `
L1 f( V/ b) F% A! i
asm(" nop");
& L" g: M' C% J I2 _
/ ^0 Q! ^* W9 m% G0 f
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# ]" d w) c5 k" m6 H6 p; G; ]
}
# T- T% J J9 y; v6 c* s# o. ]/ M) i( ^
& q( }/ [# m* U$ l9 s6 v
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* S1 [2 ?4 [9 J v+ l$ y7 u; b4 e
//UARTprintf( "i=%d\n",i);
* j2 A& a* U0 S: M
//UARTprintf( "j=%d\n",j);
1 z2 u# j& A. F/ J' } |" k' u
UARTPuts("Data mismatch in buffers.\n",-2);
/ X- L# H) N* _$ A5 j( L
if (upp_interrupt_count == 2 && upp_error_count == 0)
R. W5 Y( n8 q
{
6 r: O# g; Z+ p" x) F9 j: N
for (i = 0; i<upp_frame_size; i++)
2 u% [5 d6 ~1 O# x9 J; ^' }( k' O3 k5 W
{
n4 R( z7 ]2 I
if (upp_buffer_a
!= upp_buffer_b
)
0 n- ?1 J- F/ E
{
6 `! K3 G( i. |
upp_error_count++;
u* C9 p/ q% u/ q% ^5 S' X+ a) a
}
( a5 T* y4 x% K% n! |6 F
}
/ L( x) w3 i M; e& _$ @6 t
}
9 I i5 X: ~& R1 T! }4 X. {3 m1 g
5 o' o; L) H- Y! N" E4 j e
/* 报告通信结果*/
' ?) c2 r1 y2 ]0 A: ~8 b0 L6 f+ o
if(upp_error_count != 0)
9 A; Q$ g/ a8 K2 F+ m
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% M. N4 d0 C' l" X# E0 m2 |
else
+ T& g' }5 l. {+ s( Y
UARTPuts("uPP transfers complete!\n",-2);
: s: l2 t* K- n
6 P8 q0 f# w! d4 v8 N& X3 K+ A
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ z; n- J4 R: Z( Q
UARTGets(ch,2);
" F2 g# m8 f1 f$ ]0 d; H0 t4 Y
UARTPuts("\n", -2);
3 p4 `7 P' t3 `. k# s" k5 T
: ?( a. ?( _- x: q5 p
if(ch[0] == 'y')
9 S9 o6 r2 M( A/ x6 o' o+ ]
{
9 W1 K) Z2 @/ ^0 R7 x7 L
/*打印全部读到的数据*/
x+ D) V7 W9 Z8 n+ j
for(i=0; i<upp_frame_size; )
4 U. L$ \! @6 E" ?( p
{
: K+ l; i; V$ B
for(j=0; j<5; j++)
; z) J/ k1 \' \4 p, a2 k* H
{
" x" f$ T ~$ \: q
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ g. C$ G; b7 g! N& k* d2 q3 Q
i++;
4 l: v4 J3 e9 T. ]
//if(i >= 4096)
1 \+ x2 M* A9 P$ w# ?7 r$ Z) b. G
// break;
+ f E6 t% V& c; l
$ E8 F9 F4 Y6 h8 V4 h
}
; [; `% L$ D" V4 L1 t
UARTPuts("\n",-2);
2 @2 G. V# }) \6 ~! Q4 k9 T( C: N
}
% Z3 t( V5 O' Z5 v
}
6 e& g' D9 f- e; a8 d5 ^
: M6 t4 {: w5 f) I$ ^9 j# q$ T
}
9 U" Q4 |& d! Z4 W7 P: A- L* R
! k+ f0 k$ g. ]. h8 N
) g, t8 Q+ G, V" f: a+ x
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' n7 v& |6 v( j& D5 J4 Z
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* Z0 ? Q/ A$ P
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4