嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& }, s" c- f7 g* m5 B
Void UPP_TASK(Void)
- h" A! \2 m4 o0 }! x! Y' A
{
( Q: y' i; u: S- `
% f+ U! l# E4 g
int i,j,k,target_int_count=2;
) ^$ u+ S7 a R, _
char ch[2];
6 z# V' e: ]0 v9 m
" A3 V4 g# O5 Q f% C( W* m$ C
7 [' I' `( M4 } `0 p
8 S. Q) A1 A9 n; M: d
upp_interrupt_count = 0;
$ I1 A& ~2 P% v9 ^$ t1 u: F
upp_error_count = 0;
/ m) ]: K' @4 h9 S" S; _. i; d
: Q+ @8 J, f8 Z0 _* d$ d
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 d/ G* z9 M8 v5 O$ {1 A
// Initialize data buffers
0 a4 ]8 W/ [# w& h' @
for (i = 0; i < upp_frame_size; i++)
) X. c n9 |' b. ~
{
" O% t, q# b% G
upp_buffer_b
=i;
+ g0 Q) s7 Z0 b& K& g, y( ^, F
upp_buffer_a
= 0xDEAD;
8 v, S* ?+ `1 N) l' |
}
" u; r5 Y$ M. A' s9 H8 y1 [
& Q0 ^9 F: q" O. a
//for(i=0;i<1024;i++)
; v2 s) q8 v; L# u5 X: X' c
// temp
=0;
( _+ s8 \5 |, }5 h# h
* h/ W6 [" R& S) M4 j
//UPPReset();
2 j. l, Q3 D+ B/ Y S
/*启动UPP DMA传输*/
( g: }" R0 [2 @8 E2 ?) @
UARTPuts("upp_prog_dma_i\n",-2);
2 M! e: g6 x: P3 Q/ m) Z
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& g7 D3 o0 o6 \5 X& x! k
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ G" J1 l+ j' @" \
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; x) k1 U2 I( ~
( W2 c# X% a0 S H
UARTPuts("upp_prog_dma_i\n",-2);
8 W1 b7 x* H; ]! `5 K" P
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# V. v; R4 f& _5 D5 B+ O; ~
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% v' s$ G/ Q8 l7 {* f$ f; f
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 b0 O& A$ Y6 M' A$ L
- {8 V- S" q7 B+ G
/*等待UPP传输完毕*/
5 b, K5 L% D7 a& A
//i=0;
4 A. }) r6 B% a6 A0 \
//j=0;
' }" G% `0 k* ~
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. ?, k2 x9 @/ j, j# C
{
* }# I/ ]: i1 h1 C4 v, S
/* 测试UPP传输的同时操作普通DDR数据
% w" z% G9 |( I9 t/ {
temp
=i;
+ m s& r% f, n. k9 I
i++;
# o& A+ K3 m1 [6 n( @" h
if(i==1024)
, K: j( @; ^4 Q/ j
{
y' T0 N/ C I& h1 m
i=0;
: r4 a: T* i7 v& c- G2 H$ I, n, S
j++;
) f3 a6 {+ w4 e% C& B3 d' P
}
3 `: R8 e" L$ C9 l: Z F
*/
1 o6 S, r; T: C! i0 P: W
, t, N" s% M7 C# N {+ e
asm(" nop");
" l/ h- q/ `% j. W* n9 ?' K
5 T: Q# a# Z, a3 S
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, y' k. Y: c# i1 l
}
( O2 O. D9 t5 ? t. m! z+ d
+ [* w& T1 [7 G d! i. v0 P
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. C% _7 f/ w# O2 H4 B
//UARTprintf( "i=%d\n",i);
6 g- u: _; |% ^+ Z C8 {
//UARTprintf( "j=%d\n",j);
. P4 `& \0 F! f) Q( z' t+ x* y+ P
UARTPuts("Data mismatch in buffers.\n",-2);
( u/ Q! F1 n$ D" I2 {
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ Z, K2 e4 a9 N
{
. v. E, m5 j- N D! E5 T& E
for (i = 0; i<upp_frame_size; i++)
- p( D! ]$ K2 @/ W: k
{
: a8 e( b: s& r
if (upp_buffer_a
!= upp_buffer_b
)
/ S2 [2 y' V; c* V3 Y0 {
{
. Y" [2 @4 _* Q
upp_error_count++;
; O/ O- j) p" u2 k5 ?5 G1 _
}
& u5 z) J% o) v3 o
}
' P, w# `( I0 g' a; e* w
}
w7 u( O* n7 `. z# h
/ s* g. Z6 S4 g# J( i; z% u% u
/* 报告通信结果*/
6 Q) e3 k0 @& u( `& E
if(upp_error_count != 0)
" I. w& ~1 s0 W, v0 ]
UARTprintf( "upp_error_count=%d\n",upp_error_count);
' [% \% E& C: a4 p5 d4 V
else
6 s) \2 a: `4 l
UARTPuts("uPP transfers complete!\n",-2);
3 b/ Y: Q) V" z- h, h; o% _
' z6 Q$ @ ?8 t5 O; I/ {
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& C$ P9 a1 I* @- u
UARTGets(ch,2);
; f- {/ C" k! U( i
UARTPuts("\n", -2);
/ W0 t7 m) R2 F! Z. F) G
4 d3 [* u/ E! |+ |8 Z2 h) R
if(ch[0] == 'y')
& b3 h: g* Q7 O
{
4 h" `: P& L# B* s
/*打印全部读到的数据*/
8 _ N; M3 A4 @2 u* J- W5 V
for(i=0; i<upp_frame_size; )
- p# `/ L% I( \& \1 G
{
2 X( ?) V F, ?5 u- G( V. C# c
for(j=0; j<5; j++)
8 W6 P) S7 i9 k9 ?$ U1 Q6 j2 q
{
0 Q- D2 B- c( N, W* P, M
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! h+ \7 x* n3 C
i++;
6 i+ ~, |2 `! u# ^1 t6 W6 a
//if(i >= 4096)
* J: Y: o% z0 W* ~* d" h6 }5 U
// break;
$ ~7 X! P N& Y2 N& |
* R! S! f. I6 Q4 W. l
}
* k2 j' f3 {/ J! }# C
UARTPuts("\n",-2);
3 E. D: i/ @* H6 g8 {9 D8 s
}
! q' a0 c, b' C2 Q1 J9 T! A0 q
}
]" T9 d7 O7 B, H6 B/ s6 A
# \& y% B1 E: Y* S- ~
}
/ z, J' v9 z( }) r
) f. E$ Y6 e' T$ }% Y
" r. T! @4 e; N1 t4 p5 a# g3 e; r+ F
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" R3 _9 u! s' M; \
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" w+ x' J) y ~, u" Y
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4