嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 [0 v- T2 |# R* _- L7 s
Void UPP_TASK(Void)
& P6 j3 z( t) s' z
{
4 m y3 L) R1 g( t0 y$ }
u* e9 u- x9 @# M# m; t
int i,j,k,target_int_count=2;
( c8 Z, ?! l; y( l+ E+ V8 w
char ch[2];
. W4 D2 O* N' s" e
3 l1 V8 j0 ~" ~' }
/ r$ Q) m' B: R: ^& w
' c' [# d0 B* U# \$ g T! ^
upp_interrupt_count = 0;
4 S# R: f& j+ ?" D+ k" I
upp_error_count = 0;
4 N2 H' s4 i: ]0 p# K" h
$ w0 T# _& h3 `& L; s2 r& c2 j" w8 B
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; T' ~( f2 z( k# {; |; }
// Initialize data buffers
/ J/ O/ A( b+ K0 L
for (i = 0; i < upp_frame_size; i++)
; i3 y' L6 u2 o( c) M" ~1 F
{
$ V6 j4 O1 y2 O) \6 Y% k
upp_buffer_b
=i;
. r7 \5 E- c& }: q8 z( J
upp_buffer_a
= 0xDEAD;
5 q; b- m/ `$ H- i: _* F
}
$ c. {% S+ S0 ] O6 j5 P) g
$ K+ [2 Y, g# B9 K
//for(i=0;i<1024;i++)
% d3 I* e/ U% J$ O
// temp
=0;
& f+ L4 ]1 u8 q5 J5 N6 F
$ y( j5 P8 \- n6 I$ h# C' g9 [( U& c8 U
//UPPReset();
( m) Q& K( v% L+ ~: v8 f& o* D
/*启动UPP DMA传输*/
. }. e! {8 g* q$ K
UARTPuts("upp_prog_dma_i\n",-2);
7 L' @! w3 o# U# ^" P0 m
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
0 x p, s4 I4 W1 z* Q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 M8 c( }/ c* K- a4 U# N& i! E, a
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, n$ F& y4 o8 F r$ M
1 T; e" [! f* o; I1 d$ K: ^
UARTPuts("upp_prog_dma_i\n",-2);
9 y9 T# J5 U9 v4 Z) z1 Y9 P; z
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 g% S& P; u( X# ?" O! l" V* a
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* G4 {/ i# f9 _2 ^* c8 y7 h
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 l( m& ?) w+ m+ I
: P$ T, W$ {. B; M ^7 A0 {, U
/*等待UPP传输完毕*/
5 U5 I @# O. X- r Y
//i=0;
5 L- f4 s3 E9 E9 ^/ Q, V
//j=0;
* `3 c4 d2 ~ x$ K) m+ g2 F. w
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 ?, q( x% P4 F) Q5 ]
{
, d/ N- U% a2 N- h
/* 测试UPP传输的同时操作普通DDR数据
E d1 }6 D! f- q' _" i
temp
=i;
}& s7 s$ w h/ F( @ p
i++;
: \( T+ ` t! b4 u
if(i==1024)
2 v! X4 I7 }9 G# P! m. Y6 E
{
0 `& H* V. n8 ]$ W! {3 @
i=0;
1 J8 {/ t2 k( _) Y+ m) y% Y
j++;
' z6 `# B! Y) l' }4 ~9 _
}
. w- W. n5 l+ c; B! v6 C) M" _
*/
, r) ~8 P4 g$ N6 J. V9 r
7 N' x' V& S# j+ u- q" y: ?
asm(" nop");
3 y4 V, Y) }1 J( F" Y6 m
- q; w& W% Y2 D1 G
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 [8 ~6 L7 {# H' I* ?, Y
}
4 e# \" r' K/ Q5 H
3 j* j" `2 i/ b; D2 K! d
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 o8 X5 D; I8 D0 [$ I( q( h! x
//UARTprintf( "i=%d\n",i);
- W, w/ i# K; h. q1 w* L; a
//UARTprintf( "j=%d\n",j);
5 ^( i% `; s; R8 ]5 f5 e+ _+ Z/ b
UARTPuts("Data mismatch in buffers.\n",-2);
# c: W+ D6 [$ n" E
if (upp_interrupt_count == 2 && upp_error_count == 0)
) D$ D# k# ^( E
{
. l8 R5 l* S* i- l8 \
for (i = 0; i<upp_frame_size; i++)
; U1 H$ V1 ~0 S. F" \" h
{
, c' c! n7 e c8 f: i
if (upp_buffer_a
!= upp_buffer_b
)
; ^5 }# L7 h6 C% ~" a5 g5 Q; z' ]
{
) {( l/ k8 X M( G
upp_error_count++;
! E' v8 s. `1 u/ Y# h; u+ O) {1 o
}
# R: b% i2 A" m
}
" j. B- U: Y1 k% D3 k+ {7 V! a
}
& H. d) Y* [1 g
0 q: g; Z I [- z9 n" R
/* 报告通信结果*/
! d) S# M6 V; t9 s
if(upp_error_count != 0)
7 w& `1 B2 N$ l+ ^3 W8 z
UARTprintf( "upp_error_count=%d\n",upp_error_count);
, e: d( w0 L6 c8 q* ?
else
/ }1 n' a3 b5 I- K6 r6 W
UARTPuts("uPP transfers complete!\n",-2);
. v. E) b! A' ?! w! O% ]) b
, w' q- V9 [: y! p [5 k+ O" _8 R# Y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' I% w- I, ]! M2 {# O& j
UARTGets(ch,2);
# p. Q9 S5 ~4 P
UARTPuts("\n", -2);
8 H4 F/ r) C9 h q) P* t
1 ^1 }/ r7 k! l. H& G3 j$ S
if(ch[0] == 'y')
: {5 s+ y* J5 ?' a: J/ g1 \# E: B* e1 w
{
0 v( x. w1 V2 G
/*打印全部读到的数据*/
0 J; ? }6 n& r) X( W
for(i=0; i<upp_frame_size; )
/ n' U6 p f! ]% t
{
% N% W# p- m+ G5 @ _, ]; V
for(j=0; j<5; j++)
+ b; R, w6 x3 V' {% s
{
$ W, a7 @8 G' I, G% _) F
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
H, w- j" V- h3 K/ Z
i++;
3 E: N* ~3 n; t+ n
//if(i >= 4096)
6 W0 F( t$ D' b. O
// break;
4 d' V* J% k2 @ r7 X* i
: C9 H- e9 i Y5 b- I N6 l, _" I4 E* {
}
6 b' d8 i( d& w% O+ ]7 `
UARTPuts("\n",-2);
7 Z7 o& i5 L; R4 k6 A
}
0 O5 M6 c# A4 l7 X+ C
}
3 i4 U5 _% p( d' B; X' v: a
6 j) Q$ I( ]5 }
}
( l; F, k4 k c$ K9 n
* M, `# h' q1 y! K4 z1 c# @" ~; ]
% s& x+ o. o1 q: ]+ f. P
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& X+ P- `% X. ^. B+ q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* o; ]; `" @7 A2 [6 Y" t2 i Q
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4