嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: q8 T4 V& ~; J6 X, i, T0 Y
Void UPP_TASK(Void)
# n4 O% |* ~; o9 }1 S+ l: \! O; I
{
1 F) L7 R$ R3 p4 X! S& }
9 r! b: {: R z: S! ^' v
int i,j,k,target_int_count=2;
( ?" s# O: B( `2 c9 C" D) B( p2 J
char ch[2];
6 a* [1 `/ L G5 k+ D! d
" |3 k, t9 D' G7 m4 A- D5 l
/ J# r$ y5 m: O: w4 f
9 A5 {7 m3 F) a4 F2 K& D
upp_interrupt_count = 0;
: w* V# I1 r2 }) j
upp_error_count = 0;
. K' ~/ J) X0 a
6 R8 B( R1 f- z) o5 D
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ `. Q1 L7 H) N& S
// Initialize data buffers
# }0 ^# j! {6 T4 v1 h- ~
for (i = 0; i < upp_frame_size; i++)
# h5 n: d7 o% ]$ W3 E
{
: [. u& A1 I) ^
upp_buffer_b
=i;
5 m# Z; \, i7 x! `8 b7 N V
upp_buffer_a
= 0xDEAD;
7 \/ y6 J. a* Z
}
* i9 ~- [+ a9 W2 l" ^3 Y3 a4 b
) c) x3 T& n3 _( U
//for(i=0;i<1024;i++)
! Y. z1 ]9 K! Z4 t* N' v
// temp
=0;
8 v" y- f% N( x0 i' C
& A$ h. t( q M+ g4 e K) p2 Y* G
//UPPReset();
) N5 y' s" K" p* k$ p* e6 S+ q' h( t
/*启动UPP DMA传输*/
; [$ }3 d8 m/ H/ I+ K9 k7 q
UARTPuts("upp_prog_dma_i\n",-2);
' y" I+ ?# O2 d: ~ ]* W
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 B$ b! p- w/ ^" K3 E0 u
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; f; @. q, `' }' T
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, S ^1 x2 m. f8 K! [7 H
; w: o G* s* v& E
UARTPuts("upp_prog_dma_i\n",-2);
' W! f5 f$ U9 y) b0 o1 n* M
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- j- s y" l3 |# x( Y7 a
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 X1 T/ ^6 k1 A# {9 k4 N' F7 l
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: ~/ k3 W, G$ q9 Q
" ?" Y) v2 N" |" j; S
/*等待UPP传输完毕*/
% s+ @; @4 Y: k" p! _' P8 }
//i=0;
9 Q% t9 w) S& t8 @0 C
//j=0;
; }( Q4 [% M0 P' T9 _: t5 K6 l% t8 Z
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ J1 O/ E2 a3 L% ~) V; r, \
{
9 R; K# `2 n( M& d2 E0 g
/* 测试UPP传输的同时操作普通DDR数据
+ a( ?# q" o4 p2 N
temp
=i;
- E1 |1 q- u4 e) o( B5 W- i: ^
i++;
) o# o' ]! E/ W: c8 r" _1 V$ M( N* ?
if(i==1024)
( J3 N) p7 b2 P" _" Z6 u$ H% ~
{
) z) L9 A/ N2 ], y& v, J8 _
i=0;
( x U3 L- B" N- y
j++;
3 @' _2 |; u$ J ^ s
}
) ~7 I4 ^6 o" l! o! {! R
*/
2 D7 U! I, p$ y) t6 J0 z+ ~
9 A3 x, n7 D: K: i/ p
asm(" nop");
7 B# g5 D" A- P- P B
4 q0 L- l( h$ O, d
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ _2 ]9 g p( z
}
3 M! |: W6 c9 ~6 O2 ]
% p3 [9 J' U% i3 n! k
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 M: y) F, N- L/ s7 h% Q Z) h
//UARTprintf( "i=%d\n",i);
1 I3 \" n' M- s- k
//UARTprintf( "j=%d\n",j);
0 l7 W2 p* c, Y# Y% T8 }- Q2 R
UARTPuts("Data mismatch in buffers.\n",-2);
- g6 y6 c8 F v1 o& {
if (upp_interrupt_count == 2 && upp_error_count == 0)
# p- v" J# D6 n$ v& u
{
0 W, S" o+ f5 e; O* o0 p2 q. E
for (i = 0; i<upp_frame_size; i++)
7 V' f: M: A& ]) l) F8 G+ w3 S
{
* @% @; B: N" N: A; v- t
if (upp_buffer_a
!= upp_buffer_b
)
! x9 Q ~8 k1 F1 J9 v2 I- n
{
+ a6 t1 s" | ^% a" C9 e& E
upp_error_count++;
. F; K4 L# G2 a2 M/ I+ _
}
- T2 J C. K& v
}
! N5 V* |% [& z* z/ R! x" {. I( D( T
}
* M0 k# T" x6 V* A4 ^/ R' D
! }; k! U* V d1 [
/* 报告通信结果*/
3 H5 ]( j8 ?# m) ~- f* `, m
if(upp_error_count != 0)
) s. Q5 p- p) E p5 C
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ z- U# i$ L/ X2 V+ m$ `2 i- P; }5 d
else
) r& E7 h4 a" z8 a
UARTPuts("uPP transfers complete!\n",-2);
2 D9 T4 V+ Q; s1 V. }
- S, ?1 z4 z, R2 h x5 w
UARTPuts("Do you want to print all the data?(y/n) ",-2);
S, w6 M& \) L/ b
UARTGets(ch,2);
1 e. t. W2 ~ e* w
UARTPuts("\n", -2);
$ s) G A6 g" o) \+ p
3 c. j& B# M/ a
if(ch[0] == 'y')
$ E( k& Q3 ]3 G& d6 \8 Y
{
$ w5 P; z( F' p: w# E& [
/*打印全部读到的数据*/
; z0 X. J3 d% X( Q4 l5 O
for(i=0; i<upp_frame_size; )
2 |$ _# x/ [& q6 }
{
6 u/ Y# f4 H1 `/ K% r
for(j=0; j<5; j++)
$ y5 ~2 H& ?* S2 D& T
{
0 a1 z; H7 A P% L/ `; _
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
0 ]1 Q2 l; O8 S {
i++;
9 f" g6 h0 g9 t' T0 w H; f
//if(i >= 4096)
; F% L- B. U: f1 Q
// break;
6 w4 ~, g! ~" D$ |+ r; K. c# o$ o/ U' S
( E" {+ Z k" ]: r9 c
}
" i8 x1 \1 h. m& r& i% t8 Y
UARTPuts("\n",-2);
6 P; ?6 l5 u8 S
}
/ S- v2 Y3 [7 {. P7 E
}
, D+ F/ d* a" o
3 B; ~) `7 Q% y" ]; P* C1 i
}
' i. [5 e f1 p# R
6 _8 [' E7 }- B
: u( L% a" [) V& L( s# G/ j
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 v) L. x7 `$ f. c/ x# I
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ B" K ?9 B6 m7 {2 Q
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4