嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 r" {8 f# e* G h) X
Void UPP_TASK(Void)
1 Q( Z+ Y7 l& X1 j- ~
{
" k. {3 F! j. K5 O; v$ E
. x y' a, \( l& y& q0 h
int i,j,k,target_int_count=2;
4 w! W! G- ]- w2 s# Y0 U
char ch[2];
- }9 w, A9 g5 V) a4 A z
( A; |9 t1 K, ~1 g8 C- o, ^& E' Q9 {
$ X* K. P% X6 Z# W9 l& S
& E8 J* C/ [6 U% ?
upp_interrupt_count = 0;
% {0 E0 q' _* w( t* c o
upp_error_count = 0;
1 n! u& t V5 K7 C8 U: b) e+ \( P
- Y9 e/ {4 C8 o4 N; Y, x
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- ^9 Z6 `! L1 ^' ^" j: n7 l" b8 T
// Initialize data buffers
0 Y. |9 g+ ^- I
for (i = 0; i < upp_frame_size; i++)
' J# T8 {& Y: l t# P3 O2 S* N
{
! `: R; J5 s1 E' p' a
upp_buffer_b
=i;
6 l% J: K/ c1 c5 c7 Z$ N5 E6 |: q5 A
upp_buffer_a
= 0xDEAD;
# i5 w1 C7 D& x
}
0 \$ w n9 x( y M9 y
! X& [1 W/ R' t* g, Q. ]' Q
//for(i=0;i<1024;i++)
. L* `2 e6 l& T4 g9 w
// temp
=0;
+ P* Q7 R, j* m0 P/ J! U* Z
+ t* P W, q1 p: r
//UPPReset();
; b& `* Z2 C! e' v U8 n
/*启动UPP DMA传输*/
9 o, A2 q- i; M. I
UARTPuts("upp_prog_dma_i\n",-2);
/ ?# x) Z- |, h1 ?
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 n9 w; T9 l- f, ?: Z3 P' f$ P' B* b
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, D! i% ^+ E+ }8 [: n8 b7 }. y+ N
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# y- @+ x/ _/ I8 \* [0 [0 K$ S
) r- y" j# q+ K3 j$ D
UARTPuts("upp_prog_dma_i\n",-2);
! o$ V3 a5 B8 y+ l* \. n# b$ s
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 c. ?* V/ a. u% M0 C
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) t1 p" j! {1 c3 C& P
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ c, J" O( |: Q; o# ? W
' g Z7 W1 l5 s. Z( i
/*等待UPP传输完毕*/
1 m! p/ |0 [& H# u
//i=0;
, d; M, ?+ a, J
//j=0;
4 d+ Q" f* ]% T) x: h) e
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! j* p& C# l4 c# z9 b% ]
{
) L r5 I! m0 | D8 F8 q
/* 测试UPP传输的同时操作普通DDR数据
: ^# I; h4 _9 I! b
temp
=i;
9 C: j Y {! E8 l4 @6 i
i++;
7 G3 i- G5 G3 N" B: T$ A* A
if(i==1024)
0 U8 b4 b( y4 B+ Y# E
{
6 X, _/ j; q! ]( O
i=0;
' G" V$ i+ s; _8 w( q% F
j++;
S2 l; D j7 ?4 S8 i% K
}
) f) U j" Y* S( P$ ~
*/
, N C" @% I9 C- d
2 V/ R5 N8 u9 Q d, D. h
asm(" nop");
6 E7 _- J( T+ _' {; ^5 C2 o' i1 _
4 n, b/ w' x& V9 O7 }& g
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
d/ F4 H$ U: u% b; |( a+ o3 @
}
, G: S1 \: h% n# I0 c
# }5 _3 i; u, L) H: }3 e1 T
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 ~+ r, ]* N Z0 E# o; o0 W/ k
//UARTprintf( "i=%d\n",i);
; d1 _! h& K( J) X8 c
//UARTprintf( "j=%d\n",j);
$ h7 K6 l- W: E" o
UARTPuts("Data mismatch in buffers.\n",-2);
5 y W! E$ K8 f4 K- C
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 w# V7 i7 f9 `: B
{
, o* p' r! O# |3 I) e+ h
for (i = 0; i<upp_frame_size; i++)
8 x ]+ N0 q& r" v) i! q
{
& S! `7 X* d$ I
if (upp_buffer_a
!= upp_buffer_b
)
! d$ J! C: H, ~
{
. `9 _; f- w9 H1 e$ [5 [
upp_error_count++;
, n) G8 k& X# t! D
}
: ^5 x- v: a* p$ ]
}
5 @9 H; X; @- ?- c# c
}
8 t5 h- P5 N7 P2 J9 X! k6 M: N
) A! G; A( F$ f1 m, ^7 T. N
/* 报告通信结果*/
; X5 A7 _7 o- r4 [; w( T
if(upp_error_count != 0)
3 g/ _" B# ~+ }
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 Q) n" p3 w# i7 }( W, Y5 ]
else
! i) Q1 H4 f% A# A+ z% |
UARTPuts("uPP transfers complete!\n",-2);
3 W5 k' {. c: m) w8 W8 |
' e" a2 u- a, r2 X, v! D1 l& S
UARTPuts("Do you want to print all the data?(y/n) ",-2);
j9 m9 S! R/ e# Z
UARTGets(ch,2);
" _' H- M1 U7 S
UARTPuts("\n", -2);
; D& \; e! `& f: o) |# Z) {
0 B+ b. ?' {* s D t+ ^: D; l
if(ch[0] == 'y')
" {- O0 a) `7 B% k0 {7 o! L4 Y3 w* S
{
, A0 r8 C6 J+ w
/*打印全部读到的数据*/
3 I5 V: s% E8 z R+ j$ w. v- a
for(i=0; i<upp_frame_size; )
2 `% S( j- J3 Z5 E0 q/ m( c
{
6 T" H, M7 [" Q# v$ t
for(j=0; j<5; j++)
6 e8 }: @# }6 z9 e8 @
{
4 p! n! b& b( @* w6 T
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) ^$ ?& A# b. g$ F8 @
i++;
8 J( o! O6 }" a j8 G" W
//if(i >= 4096)
2 v/ `' e( ]8 B' z! }* k
// break;
& K: p t7 F! I
* v7 F- q* S& v% I+ y# _3 t8 U
}
0 N% h: {' Q9 }) j; @% l
UARTPuts("\n",-2);
2 k; f) a0 i& n3 t" M
}
/ p0 m( s: }' R, K
}
( p9 Y3 s5 O1 n+ ^
8 {" `+ a \$ s; A, a
}
# ~0 j/ ^$ r: s3 [. e' D& V7 g
: d8 c( B! p* X% } H+ m0 e% R }3 y6 S
% H3 V9 F) R0 x
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
M' g3 E: q0 j) Q4 W( K$ p; w
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 o) g+ e+ _2 {- f
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4