嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# L6 H6 K/ H) |5 |1 @. g0 Z
Void UPP_TASK(Void)
6 k) k" ^9 Z# h
{
% t/ p- k3 C( ?3 Y. Q; N
! j; i7 C8 x+ f: v( i
int i,j,k,target_int_count=2;
; v' l1 ]( e i( t5 {8 j
char ch[2];
3 @) u9 A. N$ ^6 H
7 Z, n' G8 _ s& o- s
! E0 c% D9 m. e( N
" |# |' S3 ]- q# X# |! s0 P
upp_interrupt_count = 0;
, `( q, G) Q& W. ^
upp_error_count = 0;
; q) e# R9 P% E2 m5 b
: |1 P; D4 y( e
UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 p7 D5 `' G1 ^1 ^: P* b& T
// Initialize data buffers
, f' i) b- A/ x6 y7 _$ F: v2 r
for (i = 0; i < upp_frame_size; i++)
' Y% S; {% e( @* d$ @
{
2 l' \( E! q! b
upp_buffer_b
=i;
! i: g! U) ?: `' A6 G
upp_buffer_a
= 0xDEAD;
# q2 B; d! ~2 z( J
}
1 R: Y$ ]- [$ v% c8 P* y4 y: @3 N+ j- ^
! ^7 H+ r$ x2 y" s g
//for(i=0;i<1024;i++)
1 X% g- o! K. i0 {
// temp
=0;
% j) F0 B" g k- c# O5 i
& ^) e& y, N3 S9 C7 \
//UPPReset();
* [7 i2 ~3 ]" F8 @# G9 X
/*启动UPP DMA传输*/
; U, j {* H% \7 Y; [ G+ y/ k5 d
UARTPuts("upp_prog_dma_i\n",-2);
& {& k6 G- j% G
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 L2 l" C& F7 k5 {$ ? T" m
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' M! x8 }; c# q$ \# c
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 x" }( \+ u8 ~5 @! ~
+ S A8 k, d6 E/ F4 i% H
UARTPuts("upp_prog_dma_i\n",-2);
" A& K3 m/ m- t! y
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* u% _6 Z: W6 B0 W+ U: a, p1 u
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 ~2 K3 V, a& R+ d
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( U4 P: X0 q& |$ k
8 a$ h5 S- q1 j: b# O
/*等待UPP传输完毕*/
9 Q$ _" {7 _2 F K7 N- o1 U }
//i=0;
+ I; F7 K" e9 t
//j=0;
1 E7 D* j6 A- S
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' w9 a* u3 d4 ~ K' A, f. y0 Z
{
: u$ f& ?+ Y3 C& J/ S% G+ f5 e
/* 测试UPP传输的同时操作普通DDR数据
. S7 z, p7 s+ D; ]
temp
=i;
3 \& T$ \3 g: g! A! B
i++;
+ {8 H& a1 |* B$ a5 a4 g8 E
if(i==1024)
9 c5 K/ N! p# V# Y, s2 b4 F
{
* r- _3 e6 p: F" X/ a
i=0;
! y9 }0 Y. ^+ A
j++;
7 T0 t7 L( Z8 A! i
}
8 D H1 k$ |# N1 A1 L3 ]
*/
0 j! ~6 Z/ A7 i
2 v* r$ T5 j! M
asm(" nop");
; k8 Q2 Y+ I8 C
' E% D+ i% C3 \
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: ]8 b: o' o: Q- E# e9 B# F
}
9 s3 @: l0 g- z5 |; |
' j4 p& v" p7 r+ t" t+ r0 r, X
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 X' `. `+ \' i! X/ n9 Z
//UARTprintf( "i=%d\n",i);
n) K/ J S" F4 Z% M
//UARTprintf( "j=%d\n",j);
5 R0 B; B2 ^' @4 h1 h3 b- S. p0 D
UARTPuts("Data mismatch in buffers.\n",-2);
0 d* K/ i7 `: m5 v
if (upp_interrupt_count == 2 && upp_error_count == 0)
* P$ s" R2 Y! B# k, N
{
; m+ i7 i e, I. [. V
for (i = 0; i<upp_frame_size; i++)
5 o3 c7 |# O" q8 |- U! P
{
# N) r* ~' i& L" S: b. z; E1 E
if (upp_buffer_a
!= upp_buffer_b
)
3 V6 N6 X3 K+ r' U1 C
{
2 A) V' ?! |* Y/ o4 \4 o
upp_error_count++;
* Q7 A. G/ e* M6 K
}
5 c1 F* k4 c/ \& Z
}
2 _( z8 Y8 O& r
}
0 M; x5 i4 w0 c% C0 {# s3 Z2 E v$ L
) d5 x& [# x: a" K; z# g
/* 报告通信结果*/
+ ?, N" i3 v( ?. k/ D9 q- u
if(upp_error_count != 0)
; C. b' z$ I. A" Y. m3 a8 a
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) h2 c, {3 |7 x& p
else
k: W" r2 x8 ]2 \* @3 E: _6 j
UARTPuts("uPP transfers complete!\n",-2);
% M' v1 H0 O% J4 }3 \
" [& }2 L! B5 K6 E% j, L N9 v
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 W" c- ?" P" p8 V
UARTGets(ch,2);
5 v" E1 \! s" y6 P) ^( v
UARTPuts("\n", -2);
6 ~% n9 N0 J H' V0 Q5 o% b* b) e# y
8 m; O; ]* y' d$ I+ K" H: W
if(ch[0] == 'y')
, Z) M7 M& a8 I$ p. L4 I3 O" a
{
1 [& D5 q& O; W9 g& }* C! _
/*打印全部读到的数据*/
9 Y+ ?% s2 {& |' Z
for(i=0; i<upp_frame_size; )
) `1 ~3 t9 P( l6 m# C2 H4 T, M! u
{
) K) I. k6 }9 v0 N# K7 `
for(j=0; j<5; j++)
) `1 K5 q/ @- @
{
; d$ v) S8 A" M b) f% f2 D
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, b2 [0 K3 m4 S& g E- c' Q
i++;
4 C/ o1 v3 y$ q8 Y
//if(i >= 4096)
* |6 c9 N+ w$ w+ O8 P3 o5 S
// break;
) G% K8 _4 z" P
& c( e1 v7 H& N" y
}
9 j9 ?+ o/ Q" b% S! _( Z
UARTPuts("\n",-2);
_/ v+ q, M& A" t0 K p0 z
}
- {0 m3 v9 H6 Q6 Q6 ]
}
( P3 R! B. ^* z* _8 r" T
1 t6 M& G% b8 l+ ]* d- @
}
* m" ^- g* I u5 F3 s
9 M/ Y9 ^1 y7 J; j# }/ L
+ e0 U5 f6 @# _
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 ~' i6 N) V6 H
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, k; ^" {; N% Y$ V/ S0 S: a
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4