嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ v7 ]: p( o. z% U
Void UPP_TASK(Void)
6 x: W" c8 w. [/ |
{
% _' [ H" Z* r. ^2 o
) A; g" [2 S+ y3 z& P
int i,j,k,target_int_count=2;
8 k) i6 a- q& K+ `/ i$ {) K3 P
char ch[2];
/ `1 {" i- \ g/ H
! ^9 ?3 O/ T! F5 c4 f2 g9 o% O- S
" Q8 u! B" j0 {$ E$ a9 J
8 e: g( y1 p9 D5 ~) ~. F+ Q" t+ N, D
upp_interrupt_count = 0;
* q9 B" S% r9 P) X3 @5 G, G
upp_error_count = 0;
9 d W ]9 K& H- n- \ ]& F9 t) E
* ^" F5 y& A Q, s
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ p9 I8 r1 o5 d
// Initialize data buffers
; m: r) S) v, L# E6 q1 T
for (i = 0; i < upp_frame_size; i++)
' |) a2 r8 `! L
{
- _' x# F3 R9 b1 Y( u1 M" A* j
upp_buffer_b
=i;
# h3 E3 ~( r: S6 _4 v2 C" [! ]
upp_buffer_a
= 0xDEAD;
; ^% `* ~6 N5 K7 F X
}
; n' x" D9 x' e. I, q! {& B
* G6 M; L6 \0 a* \* V. H( _
//for(i=0;i<1024;i++)
, Q9 k7 _3 |' J% G! N
// temp
=0;
1 Z6 ^" V8 h& t9 d3 `7 ?, ^
0 Z8 m$ [+ h ?! m
//UPPReset();
$ D1 B( m! J% ~$ D; P
/*启动UPP DMA传输*/
2 w0 O4 I: m3 r1 F! W, b
UARTPuts("upp_prog_dma_i\n",-2);
! {, m8 ^0 |, I- B( k
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: X; c' H) V2 ~% h3 S
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, d; V& K, e2 l
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ t) ~( L; C8 ~' [" ~8 g6 j1 G
' R3 C; U- p* U I/ V$ v' N
UARTPuts("upp_prog_dma_i\n",-2);
$ i2 ~8 g5 n1 D. e
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ W1 q0 @/ L0 i5 ]4 ~
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. |+ ]" h/ U( I$ O2 g
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% f: l' f. S% [0 @
1 s5 r9 b% ]. t& I5 v
/*等待UPP传输完毕*/
- I* C/ s+ D0 `
//i=0;
0 L# F; P+ w: i4 M \* K* y
//j=0;
. b' P: D+ E8 \7 K% P$ [% D
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 P1 }' L$ v6 f2 n7 j; L
{
: q; m2 ~4 q# q0 Z) M
/* 测试UPP传输的同时操作普通DDR数据
# a, K; W1 s' v
temp
=i;
7 ], q" Q' t' `$ B# S, }1 I
i++;
. s$ k/ {/ n9 m1 p5 [, `+ F
if(i==1024)
3 q8 N1 D9 D- K/ G% n- j: m9 W% z
{
' N2 l6 X5 S. \" Y% P1 s) d
i=0;
3 j3 W0 o1 b1 x; f9 F7 |
j++;
3 Q/ Z. u7 A, e8 L- f8 F
}
- q( H+ y7 i7 y! ~$ C
*/
" s( {$ x3 |: V- r
" C1 ]& E$ y( k8 O% }
asm(" nop");
, l' H* U& l T( w5 V0 F4 e2 ^
1 ]: |5 m# W! ]( Y3 O* r
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 t, y& f9 x4 H1 E
}
8 X7 G- ^8 |$ {( x6 O% ~
4 C9 s" U+ T* X
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 c) ]7 p8 ]! g- H( b
//UARTprintf( "i=%d\n",i);
9 K% L9 {8 i: a% F5 g* R
//UARTprintf( "j=%d\n",j);
/ G4 S( f7 ]9 d7 u
UARTPuts("Data mismatch in buffers.\n",-2);
$ y9 a8 ?1 O- p* p+ L
if (upp_interrupt_count == 2 && upp_error_count == 0)
( I% U6 |* P8 I5 F3 D+ b
{
# v; V b5 L: L3 m4 ]# X
for (i = 0; i<upp_frame_size; i++)
( z: j2 ]# h, w! F4 W$ A! m
{
0 A, B5 W; g9 |: p: m
if (upp_buffer_a
!= upp_buffer_b
)
1 X. B2 N& z* @$ }- i) E
{
- h2 `2 V; }$ }) {
upp_error_count++;
( _* t3 x/ u/ I+ i% {
}
" N2 [1 W4 q& ?' c! S
}
1 w+ v5 l* @7 l* `
}
+ f: Z3 Z: a# v6 H2 D; t
/ }& E# u; u' o: m0 [, x/ O9 @& O5 [
/* 报告通信结果*/
( f; @5 A1 R8 y: x/ @# ~& p5 x
if(upp_error_count != 0)
1 @5 f; i0 I% U+ T
UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ s1 e# {: O/ i6 E' N
else
; E+ V# t p$ c' N9 o2 }
UARTPuts("uPP transfers complete!\n",-2);
& ?$ F f/ R/ L1 P; G# U$ b) E
8 t6 T& S; ?9 f( D* D# L& g
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 b2 M8 [% `5 }( v1 d4 z
UARTGets(ch,2);
) N$ k3 ?% z4 V/ {
UARTPuts("\n", -2);
; o9 l2 g+ v" h
* m2 j7 u/ |3 y+ o$ [1 J
if(ch[0] == 'y')
. E: e6 z# @/ r1 d
{
S2 x Z( w; ^, X% T$ ~
/*打印全部读到的数据*/
; F& r' b* f. y7 k, p
for(i=0; i<upp_frame_size; )
. b" v" t* f2 D
{
8 R: o `4 _ }
for(j=0; j<5; j++)
' {. C1 Z: q; i/ o* u$ @
{
8 `% p0 y$ [3 W
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; q) [( n" e+ i. K# |3 Y7 K
i++;
0 u9 }9 y( m) {1 k* v* n! f* n
//if(i >= 4096)
: Z& |3 s$ T7 i7 W4 P, H4 O3 i
// break;
1 R# l) i3 c6 Q
! N8 p7 g/ U! a5 m
}
0 u* n3 H- }; u& y) g9 Z3 u, A
UARTPuts("\n",-2);
9 B4 j# R: {! ]4 O5 U0 O5 m
}
7 G# U, e/ X% i8 _, ]( T
}
$ q( Y8 c p! H1 b3 ~
2 U" v/ f9 O1 c k
}
; [6 N2 \" D! G& r
, C- O4 H6 a% G1 H" i. `
6 _% L" x2 T5 a+ \# c) g
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 H# K) ~" x" d
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& j4 p5 \0 d$ r% y0 _
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4