嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' L |9 q5 ~6 w$ c# H+ o
Void UPP_TASK(Void)
) Y0 {$ C" y; |
{
0 i" U7 q: N2 ?* d3 f& `. \0 I4 k
( j8 K1 m! u/ {/ ]1 o' Y
int i,j,k,target_int_count=2;
$ A; [$ y# K4 M
char ch[2];
6 P: ` y& o) G5 N8 [+ R
O# V0 w4 K6 \8 c0 }
; i( z3 l; }' O% i5 o3 W1 v# {
$ u( }% ^5 Z; ~6 B
upp_interrupt_count = 0;
# T2 y# ^8 _) l) E6 {
upp_error_count = 0;
% @8 S) Q# w( I+ u. v4 q0 k# ?
* L0 G3 ?$ D: _) N4 q `' i0 ]* O
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( Z; K1 k; @) N$ U: F3 K8 C8 f
// Initialize data buffers
" n! I/ U. U- B: a9 _$ H$ L
for (i = 0; i < upp_frame_size; i++)
0 U, u& ~, i4 W# J7 V
{
4 l, I3 x* x5 R$ [
upp_buffer_b
=i;
* i# H' ^# S; }; Q
upp_buffer_a
= 0xDEAD;
) s$ S$ P& e9 j; w
}
5 g8 U$ o$ ]; R2 C
5 K' X# q3 e$ j Z" a6 O( O% b
//for(i=0;i<1024;i++)
! t. `* q/ `5 }5 d$ q5 A3 S+ ?: O
// temp
=0;
, U7 w( }+ H# } W" G$ L" e
: l. {0 D7 I8 T- X
//UPPReset();
2 U# H( d& C" H6 J) O& _( K9 Y( ^% |9 p; v
/*启动UPP DMA传输*/
- c( e: t1 [4 d
UARTPuts("upp_prog_dma_i\n",-2);
5 W0 e. C* A9 j; H s, O$ n: u1 L
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. _' D% ]7 p- o5 ^& b0 Z1 H
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, q z( c; N% s( m
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* C; A# B) Y% f. H) _3 q. ]6 Y* T
3 ]+ L" K* l. _. \5 I/ L& o: H9 Q
UARTPuts("upp_prog_dma_i\n",-2);
% p% f5 N* N0 U
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, A4 x4 X, i, H) k
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) p7 E( @' |; G: T- K
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, F- G7 L$ j8 p$ M! T: f
* P$ D# ?" G1 h! _& D1 a
/*等待UPP传输完毕*/
( ^0 b) [9 A M. x$ ?
//i=0;
% m( J& Y% C3 V( X
//j=0;
' v1 K% P F2 ?/ r7 u
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* L( W& f7 r* N/ O! T. F9 k
{
" x0 G6 z i4 h( S6 \. F
/* 测试UPP传输的同时操作普通DDR数据
8 R, e9 g! H: k& P3 {! c
temp
=i;
9 E) ^$ ^3 n4 u _: @9 n; X9 t
i++;
+ J ]; s6 i3 ~$ u
if(i==1024)
) d9 L0 e a- [: d- F. t6 I# ~& d3 k
{
; ]5 G* C( f/ I' o L
i=0;
: Z2 }. H/ a4 k% P; ]
j++;
4 ]! t. k, H5 R
}
" B1 q4 a! N$ E% [& k) z5 N
*/
6 d% J: s" u! p+ P, g2 w
; y5 B, r, i! O7 \. |3 n
asm(" nop");
6 T* D- v- Y V
; x- R2 P9 I ?9 I* f
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ \' h: {) v$ ]8 `9 K
}
4 [9 v4 ?2 n u" m0 a* i
' K" n. H% {6 W# n- f5 h" I
/*检查UPP传输的数据是否正确 (loopback modes only)*/
u! u! V9 ?* D8 M+ M+ Z
//UARTprintf( "i=%d\n",i);
/ i7 ?, S U. X
//UARTprintf( "j=%d\n",j);
7 C$ {0 K1 e8 m p0 `% n
UARTPuts("Data mismatch in buffers.\n",-2);
0 R3 p* ]: S* m9 w+ J
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 J8 ?! X$ X9 J) u& e9 |: F
{
& m2 f8 o" M" V/ X, U
for (i = 0; i<upp_frame_size; i++)
+ d3 c% q( e/ I& V( G
{
+ `- M p, o& Z
if (upp_buffer_a
!= upp_buffer_b
)
[" q6 d( A3 Z2 `4 y+ Z3 ]
{
8 d1 K1 @, B& M7 {! H
upp_error_count++;
/ q& j; w4 z9 K7 G8 k$ d
}
+ Q1 F, r; T4 h
}
9 o/ ?. c0 P# m8 Y
}
0 h5 `* f; \/ W
8 P7 B6 F0 V0 d2 \
/* 报告通信结果*/
1 Z/ ~2 f+ ?5 p" U1 N
if(upp_error_count != 0)
: @6 E- A( X7 @* o# \
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: M/ s& r* f' z: `1 c
else
8 y6 j( q8 y3 p
UARTPuts("uPP transfers complete!\n",-2);
5 B; K) h, }8 c# \4 {) t
# w$ m3 }1 W2 p/ r8 n% b$ j
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 O2 z& H9 Q, T$ |7 {+ U9 a
UARTGets(ch,2);
" u3 r" h' c+ d2 P7 \& ?1 ^
UARTPuts("\n", -2);
# [1 |4 L+ N* t+ u
' e8 D! D n9 v! X0 L
if(ch[0] == 'y')
- e- u, K6 M! S2 C; ]2 c- Z% z0 S
{
( d# G+ h4 ` r0 H; c% K
/*打印全部读到的数据*/
6 V! Q5 r2 t# B6 O& U! h
for(i=0; i<upp_frame_size; )
" v, j x* E: u9 T! M0 ]
{
3 K' }; F& P! i$ u) N' \% B- d
for(j=0; j<5; j++)
& a. k0 k7 p7 P- `. d
{
. S8 P7 r+ T0 ~: N3 s
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( D+ \/ j0 F# A' C; S7 G
i++;
4 Y4 W) \7 z) P3 j/ S
//if(i >= 4096)
& i( U, {$ s% _2 B8 l) E
// break;
4 x9 s v0 P% C4 _! \4 B# V! x
9 a7 x9 Q0 V4 U; ~- s3 j
}
0 u$ ?' |* [% c% B
UARTPuts("\n",-2);
& ~5 T! J! R4 v* u
}
. @6 W* D" _ J
}
$ _" v$ r& j. v8 O1 G9 X
5 D2 M0 p) |& i8 ^- t
}
" |" Y, t9 N( c4 Z
- Z2 j. K, u1 O/ {- L
6 [! F% Z% Z; b6 x6 }
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
, s" S2 _2 C8 Z# D
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& k8 I5 d5 r5 h! Z3 t& [$ I
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4