嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 q3 }7 _3 g8 c/ d
Void UPP_TASK(Void)
% z# }, j/ h- B9 }2 i5 t) k! ^
{
$ q% w9 x) |' }1 a/ b& S9 F. M
3 E& G: G4 e% @! q( W+ S) ?
int i,j,k,target_int_count=2;
) z7 ]. L, E7 o4 S
char ch[2];
7 {4 a4 m2 Z: Q. c0 a2 V j
2 t' s, S4 A, p+ K: h7 g5 k% X
! R8 ^6 i0 s/ G0 G" k" \4 d
) ]& Q1 ^5 V. z1 ^
upp_interrupt_count = 0;
9 U4 G$ A+ `8 k @2 _
upp_error_count = 0;
2 R/ d! p2 V0 L" ]6 R( w' `5 W
% i M, |' U& q7 o
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! P0 M+ F$ E E9 H
// Initialize data buffers
* [* _; K0 V! r O2 q, N$ \2 A2 w
for (i = 0; i < upp_frame_size; i++)
6 s7 E" U: }' e6 b
{
) K0 r% x5 u8 u3 g/ g
upp_buffer_b
=i;
3 s% k$ C- V$ [# e
upp_buffer_a
= 0xDEAD;
: A. ~% W2 f" z" Y$ H
}
$ u: ^) Y9 e8 T% s8 y. ?
0 k* t' j" S4 @, L N
//for(i=0;i<1024;i++)
; C o* i7 R9 X
// temp
=0;
" D& a8 }1 F; k* }1 t
# b7 e3 [0 }* {) N$ p3 l7 Q
//UPPReset();
, o# x2 M% b. D% c
/*启动UPP DMA传输*/
9 p: V! p' z$ o7 E# `: ^
UARTPuts("upp_prog_dma_i\n",-2);
/ p* p! ^% x( E9 I% {
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 x4 l* Y3 u$ D# {3 }' n
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 ]4 b, M: j8 m _
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; i& p3 n+ { I6 W5 z
- a3 x4 `, Z n* c0 r( T
UARTPuts("upp_prog_dma_i\n",-2);
5 r' e& ~+ V* @& ^1 B, p
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 D& U% B) a/ m! f2 F
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 D9 L' G! m! J: C
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 P3 I1 u* }* v. |( [$ b' `
# ~" h+ l3 c; ?% V3 W
/*等待UPP传输完毕*/
3 m. Y) b( ~. w+ ^
//i=0;
* z7 _$ y; s! @8 b3 m
//j=0;
' {3 M4 ?1 D0 K4 R5 k
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 n' \8 O4 Z6 N4 L4 d3 i4 ^3 C- J
{
8 u8 d( n) k, v! B- b/ L% X
/* 测试UPP传输的同时操作普通DDR数据
3 K* z" j. F, w# P. |2 t4 m
temp
=i;
. y! `- x2 p+ m: [+ F
i++;
! r. c# J3 l1 a6 \" Q& D. W' x
if(i==1024)
4 q. f+ L5 h/ H: D5 q9 L: l) ~
{
7 l/ ~/ I1 |- R8 w' \& O) m
i=0;
8 e$ h+ h. u7 a& g* D# n
j++;
. \9 S8 a2 V. D9 ~, m" v/ I. g! D
}
+ j5 T) P7 {0 ]) V, K) n
*/
- }# i- x1 h2 U; k# C3 }8 a9 i1 _5 z
9 D9 ?8 A4 Y4 G7 Z* L3 U+ d7 n
asm(" nop");
j8 Y4 f9 u8 j2 K# h) Y
7 J' Q6 F% r4 X
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
4 M' [' S! t% s
}
1 }" O: |% f. {2 c7 l) ~# ~; V
% `- G2 y3 Z! o, n. ^! d
/*检查UPP传输的数据是否正确 (loopback modes only)*/
! }/ o( @/ v: F7 q& l Y
//UARTprintf( "i=%d\n",i);
, U0 l Q% r/ u" q
//UARTprintf( "j=%d\n",j);
1 b) g' }$ S, |% E* v
UARTPuts("Data mismatch in buffers.\n",-2);
, ^! m0 I) y0 B4 ]/ p+ Z
if (upp_interrupt_count == 2 && upp_error_count == 0)
2 W* h1 _* k) r
{
7 G7 E9 a0 m0 U, H2 k# L8 y' B
for (i = 0; i<upp_frame_size; i++)
\" Q- n: E5 h7 u6 F
{
" L# e. Q/ r, _: ^
if (upp_buffer_a
!= upp_buffer_b
)
, L& _& }* `1 h7 r( S
{
' X( U; S9 H* t# N/ C
upp_error_count++;
/ |# j# F+ z7 R
}
) m$ F1 A: \7 W) X
}
' N/ R1 b& o2 D; L
}
. X9 w( Y, g& E0 ^8 M2 d% ?
8 A& Q: M( d3 Y( N* ]4 x
/* 报告通信结果*/
8 s; P/ \: {9 x) ]
if(upp_error_count != 0)
- g/ m, p1 s+ j. {
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# M- h* j8 I0 l# n8 M
else
4 ]' f3 F! F* L; q
UARTPuts("uPP transfers complete!\n",-2);
?; x+ K8 g% U% F9 A
. \$ }/ Y% G0 g! R2 D4 c" c m
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* A* D3 D! p) Q
UARTGets(ch,2);
! Y* c, O$ s4 g7 b
UARTPuts("\n", -2);
5 p& x- _! T$ b7 a0 F
R$ X3 p Q! f' E9 j* S( E
if(ch[0] == 'y')
# ^2 a9 J( e; I) U1 `) R, O# C
{
; m* Y, l( e" M1 w$ P' y9 P4 |
/*打印全部读到的数据*/
8 Z! G5 C. _, I& d% M" Q
for(i=0; i<upp_frame_size; )
6 h" B( n/ U( Q2 l0 K. E
{
/ J' I( k- z/ q3 g0 N
for(j=0; j<5; j++)
" t$ I/ A2 V3 \4 F2 d. a
{
H1 L: u! T% r5 e& {
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. I$ S! B+ K" `
i++;
$ t4 E& E) {, b+ S) r/ R9 |# Z) @
//if(i >= 4096)
5 l2 {) i4 I, W; ?
// break;
( \# ?6 X. D4 A4 W. `+ ~
i, | x0 w' i! e" K* l, \
}
6 y# K: q) {" Q
UARTPuts("\n",-2);
: K8 V; n" J$ f8 R. o# @
}
6 a# }0 g: I0 i: T1 c
}
- U' P q" f( z7 ~9 G4 C( I
' X7 L' b( y$ @6 I( Q$ Y
}
9 ]; Y6 b, H; }; B; f# P
: w) J2 {( K1 L2 G* D$ a
/ D$ a( G9 k( m0 s
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( }- X* @9 U2 D( o# X! q$ \
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- K4 P8 j) |5 F3 Q% W
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4