嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: {& s; B, M0 ?" k- N
Void UPP_TASK(Void)
9 }. h! N: r' ?/ H3 K0 I2 ?+ E
{
& t( \" D! ?! @
3 Q$ a3 E w0 l$ p! a
int i,j,k,target_int_count=2;
# A% ]7 D3 G, q7 L' D4 D
char ch[2];
, g- ?/ V4 q# p0 S) R. W# T
$ J) U# ?1 t+ y! l$ _
7 l( y) D7 J; G
0 p( z" T u& H+ `
upp_interrupt_count = 0;
- ?: k. S$ n7 r7 D9 H) F
upp_error_count = 0;
; A6 q- P" x8 ^# M5 {
+ [$ G ~5 N9 g; | g9 {1 J. r1 W6 H
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 M) n5 ~( N! w/ D% |5 g
// Initialize data buffers
, j, b7 B8 J- \5 a- j1 m8 I4 f
for (i = 0; i < upp_frame_size; i++)
4 X) [2 F, y r% F
{
. I( u' y; n3 x8 w# `4 F) h
upp_buffer_b
=i;
( r$ w$ x/ l& U0 {5 s8 _: V
upp_buffer_a
= 0xDEAD;
2 X& i+ H! H. K5 a7 V6 e
}
* ^& I3 t! M% w6 ~& e4 G
* [' x9 Y. _0 B: q, x4 H
//for(i=0;i<1024;i++)
( D* I: h, ]% F
// temp
=0;
- t9 j- Q4 L- e- _9 _
- F) K1 [* \; F
//UPPReset();
* r8 I- n3 U: ^) v- }! y
/*启动UPP DMA传输*/
! I* U+ g9 h g! l) ]
UARTPuts("upp_prog_dma_i\n",-2);
* W, O: C! |1 E9 q {) P- G
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 j- c& E( f6 w; e9 U* u. K
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) i; G# o. j0 J5 x1 N; [
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- G' S+ V6 t4 }! U
5 t# z0 @7 Q- Y- j
UARTPuts("upp_prog_dma_i\n",-2);
6 {' t$ t/ _4 n* v
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ Y0 A( [" b' U3 |
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ Y6 L8 \" x- J# z M4 u3 z; j
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ l2 P0 q. v* E
5 ~: x. m5 H- j4 p( \" w
/*等待UPP传输完毕*/
4 O- x$ A1 U9 l5 T) {- E3 j
//i=0;
2 h7 w! K7 l Q' i, h' Z
//j=0;
/ s- ]$ ?- \4 s# C) z, U5 k' [+ l( k
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 _+ F% I$ _9 j, y/ q+ s
{
4 {* O$ ~ y J' Z$ d0 J
/* 测试UPP传输的同时操作普通DDR数据
. k: N% t- R8 X% x
temp
=i;
. e8 y, L( q# Y+ r* H& ^" I S* R
i++;
( e5 |6 r6 ?4 I; e
if(i==1024)
; I: i% c/ P4 R) ]3 A- a5 i7 E! M3 U
{
9 |* t7 R2 l: `
i=0;
; e+ s6 C& i1 {4 ?. N: S3 J& ~5 s% m
j++;
: _* Q3 O3 q$ W# E1 l& C
}
) O7 ^* O" v% N
*/
6 q8 u" M9 E5 E1 [6 m; `
# \5 R6 ~- D; a. j4 U1 B2 Y
asm(" nop");
) j+ K' N4 g4 w2 Q" S. P7 n# S9 o
! ]/ t$ u1 F0 U3 a+ z }; E4 d5 f
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: c# a2 q$ k; g, V- X
}
% ]! P! N/ f) K3 |- H: K
1 J# p( z3 A: k) E, y7 |! I$ v
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' w$ o$ J% \! o7 c
//UARTprintf( "i=%d\n",i);
% U; I1 [/ |9 W9 q8 @& o5 K
//UARTprintf( "j=%d\n",j);
5 U* ?/ j$ d4 A% {' A
UARTPuts("Data mismatch in buffers.\n",-2);
) Z& ]" L% ~5 l# q& u: p
if (upp_interrupt_count == 2 && upp_error_count == 0)
) I0 {, c0 d0 B" L+ |0 i0 F
{
# d- |& X5 F. h8 [ X% z
for (i = 0; i<upp_frame_size; i++)
# H$ I, e! \. w- d+ R
{
) m% D% T( u* }* S
if (upp_buffer_a
!= upp_buffer_b
)
% D4 U$ l1 g! V- N1 W r1 [
{
- ?' Z s% z Y# ?& Y5 Q
upp_error_count++;
5 D( e8 u$ b& C; }$ h
}
7 H0 D( A& \+ a
}
3 B n5 i! C. h
}
. I& z2 F0 }8 R. P( y
0 v: T' A: |/ p$ l ^. q
/* 报告通信结果*/
1 Q3 C6 V/ G1 ~# o% t
if(upp_error_count != 0)
3 C. ?: Y3 L2 T6 i$ `" i
UARTprintf( "upp_error_count=%d\n",upp_error_count);
_9 I. v1 d* U9 _8 q& U2 W8 O
else
# _: P! r" N$ {
UARTPuts("uPP transfers complete!\n",-2);
* m0 [' U; y, I3 e( W+ E! a6 L* Y
+ s x( t5 @" J8 P
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 m6 {$ O% ^- |8 x" }$ t
UARTGets(ch,2);
* U( ?, l" |$ e* J" s
UARTPuts("\n", -2);
+ C7 n: I4 ?9 `. d, P* Q0 f8 Y
6 O) P- s) s+ \& A0 K
if(ch[0] == 'y')
2 u/ s7 S& w+ M( ?3 z0 J
{
; \8 F: S1 \7 o5 X
/*打印全部读到的数据*/
& z4 p$ T! [ H* ^
for(i=0; i<upp_frame_size; )
0 }1 l; V$ W0 q- V; i( D
{
; |+ J6 h( a$ b0 T& o$ G1 N
for(j=0; j<5; j++)
7 ^7 i4 N5 t$ |8 b
{
1 w3 |/ } n$ Y5 W
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, a9 Y; D6 S, x7 t
i++;
. N' `+ V7 ~3 C3 i: R/ z6 ~
//if(i >= 4096)
- N" L6 B8 k5 k+ A2 ]1 w
// break;
i0 w8 l7 R+ r6 |
' u, E; b. o) ?0 z- X4 j3 R. V
}
# n" ~& o& d+ k1 I' v5 L" Y8 E
UARTPuts("\n",-2);
: z8 a" c* H' l; h7 P
}
' ]7 n P9 n/ Z( P: B% ]
}
- i" M3 ?( g2 e( v% S* z/ `( B) q
( Y% x7 R0 T- I+ J: l/ a
}
" B2 p' `& t1 L* U# w0 V
( H% q, ?& A: Z) ^8 N: h
) N, O, L2 D9 Q: W0 ~. v' E
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" p; O( m" L( c7 L- c2 W+ _2 h, s6 g
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 k0 t4 \ H* X9 H: `/ a6 r
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4