嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' U' f) m G0 |- v8 x
Void UPP_TASK(Void)
5 P" _4 Z' Z" W
{
+ L; d& F# ?4 T: F7 ^' h. Q5 }
% Z5 z1 ~; S% _2 k0 R
int i,j,k,target_int_count=2;
" G- G- b7 J* z7 T# R# w+ m7 ]$ p
char ch[2];
( d4 @+ s, Z4 F% d
2 `5 C6 T, o- e6 f* R, ~
7 w7 Y% y4 Q9 q/ A2 a d
( K j" G. e2 Z
upp_interrupt_count = 0;
7 P/ w6 p5 e4 N8 W( u# W
upp_error_count = 0;
7 |3 s i/ h& P- Y1 I
) ^: N* R) q. y- U8 S
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: c U( \3 a0 d! [+ w; P8 o) y
// Initialize data buffers
7 O+ B9 T: v- t7 \
for (i = 0; i < upp_frame_size; i++)
; U/ z0 g, E; ~0 x5 O# R- Y" {
{
* x5 d! B4 k/ q- z+ t: O5 ]
upp_buffer_b
=i;
- Z0 K3 S1 I6 |5 {0 d* O h1 S7 c
upp_buffer_a
= 0xDEAD;
4 z- c8 O( |" M+ D) q$ G2 x
}
x& U+ s) L1 C+ I- E% l
3 ~+ J I& F& L/ r; N
//for(i=0;i<1024;i++)
6 P C. H! B+ K5 Z ]6 l1 a
// temp
=0;
- V; N0 u8 c* t1 z( S3 F. c( `$ l
) X4 \" g+ D7 C
//UPPReset();
# Z0 K' o J1 k
/*启动UPP DMA传输*/
. D+ [! H* U/ k+ e
UARTPuts("upp_prog_dma_i\n",-2);
$ d/ a* l5 w+ Q7 E2 w
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; W: v& c$ U9 @+ h# b4 \
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ S3 a; [; ^4 B- o" ^
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 b5 M e; B+ R, e$ V- R9 h0 d" E
~! R2 V9 V/ Q7 E; L# O
UARTPuts("upp_prog_dma_i\n",-2);
9 Q" q) K1 R1 }) q1 | D
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 w0 O8 y$ A, e7 s# Z
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 `& ~) N+ A) p% I- t8 L q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ k- T' U {( p ]
3 m1 O& Z" n: k* `. f& r
/*等待UPP传输完毕*/
/ m {4 u. M6 k0 ?# P7 ^
//i=0;
) F/ j6 c; |! J- d9 G' R
//j=0;
: Z- _# Z7 E1 b& s! ^
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 @+ V2 j" K/ U( A' v
{
$ R& n& G b, `/ y
/* 测试UPP传输的同时操作普通DDR数据
7 @* e$ R3 N4 L8 h5 i
temp
=i;
( {) L4 \4 }7 B, p X8 z; g- H, {
i++;
# @4 X5 K3 s2 L4 Q B
if(i==1024)
$ x) d8 P9 k7 c! b5 X+ I
{
$ B3 U5 B) c; A4 t9 l8 n9 T
i=0;
9 J2 S' Y" _ P% Y* ~
j++;
O7 n9 Z9 t3 f7 r
}
8 C. C# W' h4 ` d
*/
! N+ \' o" @' V$ h( \+ S4 _
; {' V. k/ s& f
asm(" nop");
8 i5 f! @$ |6 B% \
+ j# D9 i1 f+ H1 T3 }$ b; m, m
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 w6 X4 p# Q+ \6 E. t
}
# q1 Y% E8 m+ j! u2 y
& `% f6 C8 D3 [0 Y+ o
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# ^1 b+ X! u6 w
//UARTprintf( "i=%d\n",i);
$ T z3 n# ?4 c* O. ^8 l2 H' k
//UARTprintf( "j=%d\n",j);
) f! m S* k% ^3 w# R0 u& V& a
UARTPuts("Data mismatch in buffers.\n",-2);
* E, @/ j: y% [6 _* A, Z
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 I$ w# |# \* E' s0 {
{
& i5 h0 p$ v1 L6 J3 W0 i5 x
for (i = 0; i<upp_frame_size; i++)
: E* U7 \ I' P% C" M2 M/ z/ b
{
8 o4 Q9 i N5 o p3 j, B- f* w3 k* z) Q
if (upp_buffer_a
!= upp_buffer_b
)
% s# E, T" Y- K l O: P
{
. i% [/ c! D8 T8 e
upp_error_count++;
: k5 J/ J$ V- t3 e) Y- ]. V
}
/ B: _/ S1 G4 X: B: s" {1 N
}
1 j% a% e- |0 w/ U& b4 x# h
}
2 u$ K8 g2 i" S1 X. A: M
# i. K' {+ M: w
/* 报告通信结果*/
3 S* e2 k h0 q* C$ T# o- K7 k
if(upp_error_count != 0)
4 u! P' v3 q7 V+ r4 @
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. [2 B! D) ]% j' r& G& \5 j" U" j
else
, L, U" H" N! ]
UARTPuts("uPP transfers complete!\n",-2);
* A2 a: j, _3 B$ ^3 F# m
- j& C2 W- F) D9 a) W
UARTPuts("Do you want to print all the data?(y/n) ",-2);
1 P0 Z2 d7 T: W$ G5 C
UARTGets(ch,2);
, w" b5 |7 f, _5 p- `
UARTPuts("\n", -2);
% p5 b6 \1 d8 g0 P7 o9 H
, I3 R) S9 m. `) J# c/ f* Y
if(ch[0] == 'y')
+ `0 X& \2 T7 d/ A- K4 @
{
5 u/ G" `% g+ r( _) m
/*打印全部读到的数据*/
* `. X# q# W8 U6 {2 Z
for(i=0; i<upp_frame_size; )
: C& r7 w/ y) \2 X
{
3 a) ^9 G8 S1 `# ]
for(j=0; j<5; j++)
& L8 ~3 U* {* C# D4 \
{
6 Y) c+ Q. V, m
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
: C, ^& Q6 F; Q
i++;
x7 E: {: N1 ^& l
//if(i >= 4096)
: W5 P3 T" p) J& H; d7 ?! H
// break;
; d, E# ]) r! a, K9 i& C
+ w1 y$ d: ]9 A
}
; w5 p% W. a% k: _$ C
UARTPuts("\n",-2);
! d7 L) j( b L: A# a, t: ~
}
A: D: O2 Q5 F2 \6 o
}
! \( a0 \5 i, Z( z2 F8 x
1 I* l1 H+ u2 j# I
}
# K! b/ Q( z1 U3 g' d
, L# ?! L, Z: j0 P4 ]8 E
+ B8 u8 I5 T7 N' j% h5 [
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. X3 G5 n) P' l+ p( \. s
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" U9 t& Q. v- V( l7 U) N5 z
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4