嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ g# K' X; q: D1 D0 f% q1 D. V2 V M
Void UPP_TASK(Void)
+ M w9 d3 V+ p2 Z$ V: O
{
% m/ {0 r/ a& _: F! W' {( t, j
( D% |1 W3 f1 P: T3 U
int i,j,k,target_int_count=2;
# C7 J: Q. }+ s2 U5 ~2 V9 t1 T2 p! m8 I
char ch[2];
7 p! d( F1 W' i* n
) b+ L h9 O0 L$ g& P) K" d
% @$ T W3 O- I. ?, n! x4 k
h3 l, i9 F- G8 s1 a q# I( ?
upp_interrupt_count = 0;
- C d5 `6 x7 R5 O2 f
upp_error_count = 0;
6 n6 L: @$ W# q2 V
$ v) t6 M( w5 `5 a
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: M" I: M j6 P6 s6 q- Q/ x
// Initialize data buffers
. V- v7 z4 V2 c- H0 t& s7 ^+ V7 D
for (i = 0; i < upp_frame_size; i++)
3 ]* e3 D1 K2 R; D3 Z7 k/ F
{
- z/ _) i' U' r( z, V7 c& Z
upp_buffer_b
=i;
' }: I% i/ I) v* J! r3 V9 M
upp_buffer_a
= 0xDEAD;
7 x- E4 M# V4 e s6 b5 J( H
}
r/ F& A* i0 A9 y3 i T+ @$ a$ {
4 M7 P+ M2 c% |& r' {$ j1 v
//for(i=0;i<1024;i++)
. a! E9 r! b- F0 m+ a" I8 e6 {
// temp
=0;
) ]0 h, E4 ^* ?# b, Q* s
% o4 M9 r9 a- f) v4 \
//UPPReset();
% b3 c6 a" X# M. ~5 g; h9 F2 M
/*启动UPP DMA传输*/
* S! P9 u4 v0 ?
UARTPuts("upp_prog_dma_i\n",-2);
+ R8 N9 Q4 w2 o& N$ F1 a! D# u
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 O+ T. x' M) S$ M% p0 I7 V
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) Q6 t$ g L7 d# [% S+ q$ P
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 z8 Z3 Y/ e k4 y5 i
' C$ A& a3 T- q/ d! K
UARTPuts("upp_prog_dma_i\n",-2);
- C8 _% h! f7 o2 Q q6 V1 \$ U
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& B- d, b8 ^# D: J2 q: x) }
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 J4 @ x* R4 [6 G4 X( `6 X! ]
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
, w) g0 N$ t e' k1 A
7 u- s: W. c/ e: b4 ^3 T l( O& A" B
/*等待UPP传输完毕*/
5 U- r! a, Z7 z
//i=0;
a1 @- b/ Z& s) c, m% R& ~/ d8 N- t$ \
//j=0;
' Z/ U* t1 y& f( b
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 U, V" P# W# t
{
/ d N% V4 v' `% p9 r
/* 测试UPP传输的同时操作普通DDR数据
! @2 u. V; m/ ?
temp
=i;
5 n" Q" K0 ^3 D+ r& u; l
i++;
7 d; Q5 c4 g7 J( n8 |
if(i==1024)
) ?* d( f' J1 Q& r" ?1 }8 e5 a
{
" O# i! C9 g3 L0 r1 R) H
i=0;
. K6 X. U& `# Z( |; J
j++;
3 m5 \! P7 `4 }
}
+ ?! g5 b9 v; l6 e. _
*/
& B- L, e+ X* L- N4 s
; k9 _" a% S% x% k8 R2 J
asm(" nop");
& z3 u6 S, p/ f1 E! [5 z
; C1 v. \* C) j5 ]" P+ k
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! W% C. K7 o$ m7 J9 B7 k
}
" {$ \, F: C& z5 k! l4 v
6 m! p* P& O- \$ e1 y$ p/ L
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ J, m. V3 J, Y3 M5 @2 r
//UARTprintf( "i=%d\n",i);
$ s4 g0 v& F9 |% f) u. G4 A
//UARTprintf( "j=%d\n",j);
8 g$ ~. E3 ?4 Z# n
UARTPuts("Data mismatch in buffers.\n",-2);
: b9 _7 H; [2 s9 {- K; M
if (upp_interrupt_count == 2 && upp_error_count == 0)
* y2 o, t3 U% W1 ]$ w
{
K) m8 e ]* H7 f! a
for (i = 0; i<upp_frame_size; i++)
. Z5 @1 H' K5 P( N; r
{
2 ^& g z4 H \' T* O
if (upp_buffer_a
!= upp_buffer_b
)
' @" m, _, y, O; ?8 [. H: v3 h
{
, q2 o) Q0 ~! q2 P( D9 O
upp_error_count++;
/ P! k" c- V9 F5 _, {
}
9 P4 Y# M$ t4 I- d; t
}
, R5 b7 | L3 i$ t) J4 K# ?0 F
}
$ q5 W' P4 c9 @, g R* Z
" H9 q1 B$ f+ q0 ~
/* 报告通信结果*/
0 n2 j, n% K' T5 g
if(upp_error_count != 0)
/ w- Q& {; y) d% Z7 C: V. N, ]
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 |2 c3 B8 w. w
else
3 s/ q4 W/ V( C8 k
UARTPuts("uPP transfers complete!\n",-2);
8 ~4 g( `; l9 e2 F% b" @* L0 ]' `; b
0 B3 `, V) K& [; P$ B( ]( S
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 {" `* W; o- q
UARTGets(ch,2);
6 N$ _/ ?" v+ V4 {' a5 s
UARTPuts("\n", -2);
9 k1 o0 X: S! U# H, ]! w& T k1 ^9 ^
. t7 s! d2 s* D; T
if(ch[0] == 'y')
/ S; \ H: S2 ^% M* p) V
{
7 g( D+ ~& d+ V9 e" n
/*打印全部读到的数据*/
! z& K I1 S( O; i b& [* D' r
for(i=0; i<upp_frame_size; )
% c. H+ ~6 W7 D1 s& P
{
8 a. O1 ^! n; v3 Y4 T
for(j=0; j<5; j++)
/ E1 o! P$ R+ i# @3 D
{
* M3 A. v* f; j! i# s( p7 f$ @' d
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# M4 K! l* L+ T0 L6 J& U# S% ~+ }
i++;
2 v& ~1 w; Q' s/ U
//if(i >= 4096)
3 D" L9 f' y4 N% [: X
// break;
4 o5 X( c% C0 U
2 K) X, n% d" h8 J6 f
}
4 |6 h A' j! z" ?$ v# m
UARTPuts("\n",-2);
, n( k; o) T- ]" y* y5 x7 }
}
( m7 }4 f1 U$ l- {; P, I
}
1 {& A$ y X, A% e/ {
/ X* o1 t1 }6 Q: M
}
( d" o% R; d) t* O4 l: S
! U; p# l5 H, U
" b8 A3 Z7 ~7 d- p2 C' R
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- H2 o* y6 B# y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" H' H* T$ B. ?' ]* K! o
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4