嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% X0 q' o* |$ _$ d6 j3 K' c% }
Void UPP_TASK(Void)
. N( r M, G% i: Z3 l. G$ b; ?1 B- J& u
{
( r2 b- s0 s" x6 w
9 c. j1 s! e+ [( N$ |! l! r1 m; D/ F' e
int i,j,k,target_int_count=2;
4 X- n) n2 n8 h) {. ?, d$ H7 q
char ch[2];
5 G U4 @4 L* b
6 c! i" N# D) K1 s5 x: v5 e
% @( Y p9 @6 Z( _$ c
6 Z1 u4 D8 k1 T' a
upp_interrupt_count = 0;
5 k# B% a; w5 z6 |" V
upp_error_count = 0;
8 _& }8 p" F8 `% |; P- @: P) m
( K" M: j, i; Y. U
UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 X i: Y4 S, }
// Initialize data buffers
6 H8 e. q5 }0 O- s/ }
for (i = 0; i < upp_frame_size; i++)
+ c E: ^7 x! W3 U9 J* p# a% u
{
3 o/ \, R: m/ s: S& p
upp_buffer_b
=i;
0 r9 A3 g+ s- y# ^. \' Z- {. Z
upp_buffer_a
= 0xDEAD;
7 x! |7 f% a9 o
}
, c/ v R) I# M7 Z7 a( `/ n; n
% [( d7 X& N$ j% [
//for(i=0;i<1024;i++)
* H0 n: |; }$ e$ v, Z
// temp
=0;
. A. ?$ ?. ?# A- l0 _; ~0 g
2 X6 T& K' P* ?4 `! U: i
//UPPReset();
6 l4 k7 A" g/ w$ |. S2 r$ d/ R
/*启动UPP DMA传输*/
# y1 N% a. Y/ {/ r# @
UARTPuts("upp_prog_dma_i\n",-2);
) m, e0 K+ l- h0 `9 O
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ W) S- G4 Y0 o9 K O
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( C9 _% d. i1 A( v+ T, p; q: X/ H+ ]
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 {, i% H' v E8 w k; \( ~
* P* [. r2 [! m" S0 U. y
UARTPuts("upp_prog_dma_i\n",-2);
6 c: }- H1 O; h0 I8 V
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; i3 C9 _+ s: J/ }3 U
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" c) r1 ] h- l5 M% d* m2 B
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 K' m- a& s |0 N3 I
( p, P: B& @$ F5 M6 d5 ~
/*等待UPP传输完毕*/
S9 b/ z0 N$ ?) |/ Y8 l
//i=0;
2 {) O. l- n) l" X0 H1 O9 L
//j=0;
4 z, r+ ^5 t' D: p3 x: f
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; N1 x& {$ e$ R8 J
{
3 p2 _, Y* f0 ?' S0 i8 O5 g% l2 a
/* 测试UPP传输的同时操作普通DDR数据
& E6 b. W A8 n
temp
=i;
$ a( m/ Y. q% r1 O$ U# T( ^
i++;
$ H/ S- R8 v( f; b+ U' a
if(i==1024)
# F2 V& P5 F2 _( I! S
{
% k3 v+ m- z8 ?7 f6 g J' I5 q$ _
i=0;
1 p6 v( C) |% D1 a0 B: @1 y
j++;
. B% K/ \$ y5 L ]5 [
}
; B! q7 i1 h1 [9 A) V& t% y! ~
*/
7 {2 ^# [3 Y9 V1 o9 ~3 R) k
, R) W. m2 J, _& ^# t
asm(" nop");
; y; P( ^% q+ P7 v7 r9 k, \6 d1 }
$ I1 b- E& i3 U5 y; \5 f, g
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 n2 H; y# {: ]: t2 Z$ M% O6 ?- m
}
; I' c% v: ^( k3 U% C. b
# s" I3 r4 r, Z# c
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" W9 R% e+ b% V& X$ U. D6 l+ l
//UARTprintf( "i=%d\n",i);
/ P- z. g( X' s; S$ f* |* Q' Q
//UARTprintf( "j=%d\n",j);
2 k4 s/ w9 W m$ z+ o5 T; x) R
UARTPuts("Data mismatch in buffers.\n",-2);
0 n8 F1 I d( J
if (upp_interrupt_count == 2 && upp_error_count == 0)
- S) a8 ?/ ~6 L2 G) T# a; n& B
{
, E- ?( {6 @! n
for (i = 0; i<upp_frame_size; i++)
, g' Y3 K4 I7 O
{
4 {+ ]2 Y4 `* }# k+ _
if (upp_buffer_a
!= upp_buffer_b
)
) i* ?3 v8 n$ K8 J" D/ y5 Q
{
; u& r5 V; D4 G, _
upp_error_count++;
; x0 H9 v& ~# W# _' t" a: U
}
1 U" [6 @& i4 n9 s! i5 y: E8 ~
}
9 R9 U9 U9 k, N" n
}
l; B& r% M& d
( D3 R8 v5 G& w3 P5 L2 ]! [7 j
/* 报告通信结果*/
9 M# }# l8 j5 d% q0 X% G
if(upp_error_count != 0)
) N0 K3 \7 W0 K- d( |
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 m S# V& t3 j3 c
else
# a4 z! i/ d1 y6 h0 H
UARTPuts("uPP transfers complete!\n",-2);
' [& t2 M: t4 ~/ v1 B' T+ w' J
. g+ T7 I$ d& P! W" n% k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: ~" @$ _' b9 }0 k
UARTGets(ch,2);
# E/ h) i# _$ a
UARTPuts("\n", -2);
; @, A4 S3 _, z( f( S9 E+ r# |
0 S1 G: l) O6 E
if(ch[0] == 'y')
/ [. a% q/ j5 @9 _4 a, A
{
4 c3 E# L" ?+ ?
/*打印全部读到的数据*/
7 d0 Y# h4 D8 P6 G9 a/ J
for(i=0; i<upp_frame_size; )
5 |/ ^* P; e! b. x+ Q; Q5 _; v% ?
{
+ o& n' e5 f) u/ b4 p
for(j=0; j<5; j++)
3 @: v& [1 A' V3 J$ O1 x
{
% N# p9 \9 N9 r" m" [
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 s4 G5 o$ x2 B) X# O7 b
i++;
/ w8 Z% l" g- Y, i4 ]7 s* R& J: O
//if(i >= 4096)
" e/ x5 ~- `" }0 ^3 H; w
// break;
( {1 O% L. h0 N+ N
- O$ ^" M* d* J* z0 V
}
- ]! m% ?; }, x% Y3 q- ^
UARTPuts("\n",-2);
4 S2 t9 B* H2 X1 r' j
}
7 N4 V3 e4 ]( q
}
2 w) Q- |* ~, ^) M. Q- L
- @9 T$ w8 C! b9 s3 i- J
}
" L' S9 }" \8 d* C. \
; V" L1 j: l8 j; x' T( E$ P
: @" S2 h+ x/ q1 T6 q, L
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& L) }9 R9 w k, e& Q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) `- ^2 `# ~7 {! u
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4