嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, D4 c( A& B0 R$ [: i
Void UPP_TASK(Void)
8 c+ N) f/ q- C3 k
{
2 t) j) {- O) l5 @. f2 N# }8 p
5 n, A* T. C, @6 [+ l! N5 a9 x
int i,j,k,target_int_count=2;
6 e5 I# }8 a; [5 S6 b& o
char ch[2];
1 ^2 Y$ y& r! z* u$ G" w) C( Z
8 L: u! h' D$ C" G
* l; Y Z: t% Q# x
3 V, G7 S* d3 {, [6 a- y" d! v& J
upp_interrupt_count = 0;
2 n9 @# i, |1 L1 w( E- `
upp_error_count = 0;
2 S: ^9 u' h$ [; n9 U
* x9 b$ S9 R( Y9 c: @/ U
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* m% B0 j8 c' Q
// Initialize data buffers
+ O7 S! V. {- h; g B" n( e
for (i = 0; i < upp_frame_size; i++)
3 z% K$ r1 j7 o5 M3 Y- T
{
% R5 O0 i2 E; c6 G3 Z& [! u
upp_buffer_b
=i;
7 k: W! f5 K: X# c" n
upp_buffer_a
= 0xDEAD;
% Q: ~# o! K7 q
}
' d3 j0 `& G5 L4 h1 P4 P
- ?% _- Z9 q7 Q5 g. [& q" l5 h
//for(i=0;i<1024;i++)
# ^' l- `* _3 |! Q
// temp
=0;
: b2 L% J- N& |8 D- P* a3 Q! Q! [
6 N; x: o: H% I6 u* S7 L
//UPPReset();
& N8 i" o, u5 m2 @$ R: O# X1 p5 \
/*启动UPP DMA传输*/
) U. c, q. M5 p; q* @, C
UARTPuts("upp_prog_dma_i\n",-2);
' P' _ [1 f) O% L3 p5 C: o4 V- b& N. R
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- ^* R( }: s. Z. H! a2 u: Q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; @4 K1 O' O/ B9 z* R& V1 W, C
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ v# ]+ h6 S4 E# }( J
& ]% t( [$ }! w
UARTPuts("upp_prog_dma_i\n",-2);
# l+ y6 U7 P9 L$ i. i& Q* _' p
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# o5 z9 \2 M* T. ], ]/ R' |
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ f4 n4 J, O& H8 H$ ?0 L* I3 e
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 T7 B. [$ R! v( o7 R$ ~6 y, L0 t
* r. j2 D7 d- o0 j8 M3 d
/*等待UPP传输完毕*/
' H$ ]" M. ~/ M3 P
//i=0;
& m* S2 W: L! G4 u* T
//j=0;
% z# e) k& X8 M f2 D' k
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! p) i: H+ L- ^6 m: `
{
, F) K9 D3 ^8 B1 ]
/* 测试UPP传输的同时操作普通DDR数据
& k8 J% z( Y J
temp
=i;
/ E ?0 D6 w6 J7 L! Q; E5 G
i++;
! T8 M! x$ q( k) C5 u
if(i==1024)
" |. I% d% `+ \! P
{
( S7 h2 C5 g$ d* [! r, m
i=0;
5 w1 i# }' _1 p; o0 ~
j++;
% n) b5 G; L9 \. j4 R/ B
}
! k& H) C# J C: n3 d
*/
$ H/ i3 f" Q7 X% M5 N0 i; R7 |. [
# y7 H" n; ^, w" b$ a, U
asm(" nop");
& v2 }0 {2 m2 h6 n1 `/ ~
* b0 b% y( [0 J( u( X4 v
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" v4 I' _# X- Y' Y# j
}
. \7 r( t) V$ R% a
: i# @7 E2 l7 ~# `
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 ~( `2 S0 r3 t2 F( x! M
//UARTprintf( "i=%d\n",i);
% O) H5 G; |) m2 \3 ^
//UARTprintf( "j=%d\n",j);
% o( [4 u {* N$ m8 e4 R6 c8 I
UARTPuts("Data mismatch in buffers.\n",-2);
5 x( [" L* H8 k6 _- R5 A; V
if (upp_interrupt_count == 2 && upp_error_count == 0)
! I) X# W# S- B5 t) N1 Z% V/ I
{
" k' K$ w! h2 A* Q
for (i = 0; i<upp_frame_size; i++)
! I/ H0 c9 W2 M3 A" T8 ?
{
. @/ J8 S$ K) y M& F0 m0 _
if (upp_buffer_a
!= upp_buffer_b
)
" Q, z+ o4 a/ s9 g$ {0 K
{
1 F: \! V5 A& @1 w- X
upp_error_count++;
; J. v. p+ O% T! u, u
}
& I& Z) p5 Z( F- P% a* t2 X, d
}
$ L5 A) r( C6 S7 ~- c8 c& j& e, i
}
+ V1 [! }6 n/ q6 Q/ M* o0 p( d
9 ^0 E' R) g) a2 g0 Q
/* 报告通信结果*/
+ w' {+ E% ]: o) J4 G0 Z
if(upp_error_count != 0)
% T8 Y6 f9 i! S& E5 a% i
UARTprintf( "upp_error_count=%d\n",upp_error_count);
! E* }/ X& [" t6 |. h- w- ?
else
4 Q% `9 a% r" E V; ^4 h! C
UARTPuts("uPP transfers complete!\n",-2);
( k8 o2 C, m7 `+ R# r
F* E+ ~% V, S5 H. z) m
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ t& T9 y5 K8 U
UARTGets(ch,2);
* P: ]8 I+ U/ f2 [) F7 w: y9 \1 _
UARTPuts("\n", -2);
6 J8 p; D5 D0 j, E$ ~" l% C! t
" ]1 G I2 d9 o2 ^* y5 ^2 O1 d( F
if(ch[0] == 'y')
0 h9 M- I" j0 Z0 x8 I5 P
{
3 C: g# x; a: `8 I( d8 @: j% H
/*打印全部读到的数据*/
6 v; R3 m; |9 ^
for(i=0; i<upp_frame_size; )
% D4 N! t& K. D3 X8 E& n
{
/ B( d2 ^3 h3 |0 i) y
for(j=0; j<5; j++)
0 t4 o! M' n. B% z! O. P8 M
{
5 i& `( z9 a3 y) T9 h
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 M2 ^% r6 |3 Z+ N# S# a% w8 {
i++;
# E9 ]! m2 q+ Z$ M* R7 }; P
//if(i >= 4096)
$ z' F0 h3 [& O
// break;
; V* }' h2 D; W6 ^5 c
/ k( I @9 Y0 L. o8 C& Z4 [8 f g
}
/ H) J9 L' E( F' V( D
UARTPuts("\n",-2);
3 p8 P. g- A( T* D4 c9 ^. u
}
- C8 N ^" @2 c! _
}
6 a. @6 Q8 Y; C) u2 o! A, w$ A) P8 k
- j r& f9 }& A; l2 y' O; D
}
, n7 n- \$ t. Y' o$ X: }6 R
$ P$ R( p' o$ X; F5 o' c4 E( n
0 m4 M: P% H' A& E8 `
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 i4 x) C+ x0 X4 p
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ R- K- {6 O7 T) f) w5 ^% E
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4