嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 H" t, h5 }/ R& p1 @' d1 h& k
Void UPP_TASK(Void)
( q, c% c: c. {# s
{
# c @3 n r: O/ k% v7 \ s& B
, x% ]+ a/ Q" ^- J8 b* B, T$ O
int i,j,k,target_int_count=2;
7 k* ?9 y; ?. n8 J, H
char ch[2];
! [4 W1 }0 D* K, Z! M# v
; ?/ g) S- o. g( T' G5 `
$ ^/ E! v) h! P2 d& @: C/ S
9 n5 O% c, n/ P
upp_interrupt_count = 0;
N( g2 y0 P/ E* | @) g L$ ^
upp_error_count = 0;
+ g* i3 P; L, E: t/ X2 }( X) w) i
7 y v" f5 @3 q! O/ d& M% H r
UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 [- K" G$ A1 h0 B
// Initialize data buffers
- n$ i# p" p. f6 x8 `; y+ o/ Z
for (i = 0; i < upp_frame_size; i++)
6 @; Q0 H2 ~ o7 H/ j+ L( C! G5 C
{
% X1 M G3 t. p9 H* X6 m
upp_buffer_b
=i;
, B5 z: Z( H+ W4 t$ L9 v P: F6 B2 o
upp_buffer_a
= 0xDEAD;
* P4 m/ c. X6 {$ V& p! T. d
}
& v3 i+ r' N u4 x7 \
# S( D' f4 Y O) {# b
//for(i=0;i<1024;i++)
& ]: e; C1 O8 l, ?* I! i3 q
// temp
=0;
, z6 R% t, F" A$ ~
7 ?1 O" H, T! ?
//UPPReset();
9 D, \4 ~0 w% G' q4 R1 ~
/*启动UPP DMA传输*/
5 G$ ^8 r3 N+ e1 c. K
UARTPuts("upp_prog_dma_i\n",-2);
2 V Z5 ?* @3 r% a0 } H7 e% s x3 h
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) F+ Z2 D/ n# B; H2 r x9 y
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 q, @' [; ~: U0 n
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 B( N+ p- z# W9 h
8 z! f1 T* j B) `2 L8 o
UARTPuts("upp_prog_dma_i\n",-2);
% t1 T0 S# E: s% c* e
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, N; a/ p. h' O8 k M; J; n
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- q& o4 Q/ D& A* P( e c, N
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* K1 B( J V5 j# z L. T" a
0 _, w3 C; L ^) d: p
/*等待UPP传输完毕*/
* P+ d- X& c8 O0 M; ]* b- S
//i=0;
L. v% w$ C- S, v0 S1 x! K# x
//j=0;
2 h( P1 h) H9 y, V
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! d1 T: I1 V& v1 y" Z% {
{
$ Z1 P& a# I J8 }- L
/* 测试UPP传输的同时操作普通DDR数据
|8 V3 r: }; N
temp
=i;
( C. l! x! e5 h: M
i++;
h5 R+ W Q( K7 o1 @9 f
if(i==1024)
6 m& K0 j: q M
{
4 K+ Q0 a; X; N) ^1 G3 K# |
i=0;
6 x1 w3 O1 o. [) s* w
j++;
4 f# n; G. V1 c) m. m8 r
}
. U8 ]# e K+ n2 U& P1 p- W/ v ~3 W
*/
- ?1 g6 R7 D1 G( J& ]$ A$ O
, j5 ]! A& [9 M0 j* v
asm(" nop");
7 o& S0 T0 x- j1 _( M6 L9 {' S
: F2 L. y5 F4 ^
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 ` J$ K7 i; T2 z% u
}
: O4 H7 D& ~$ ^! q! v3 ?
1 ?2 S4 N) [3 r) z: I
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 M1 m& e5 p" S
//UARTprintf( "i=%d\n",i);
- o' r4 Y1 @8 V% K! j0 o
//UARTprintf( "j=%d\n",j);
6 W, m' k4 J+ }, |9 A( D1 P, a
UARTPuts("Data mismatch in buffers.\n",-2);
( I) v/ J8 ]9 h; A
if (upp_interrupt_count == 2 && upp_error_count == 0)
; y6 g7 U- b" d
{
- [1 }) N! f: a0 B2 V' P4 q
for (i = 0; i<upp_frame_size; i++)
. R$ u! v" V2 d, I
{
& G. G. C w1 m8 j# ~! W7 ]
if (upp_buffer_a
!= upp_buffer_b
)
% F0 i$ i; V$ n# P8 J* J
{
@) @' V9 ^7 Y. X# ~' }
upp_error_count++;
+ B- J- k, s2 g
}
8 R9 m" h9 |7 `% I
}
1 w# a$ z+ W2 l( s1 i w# _
}
4 m* F; y$ h i5 d- M& a2 b" y0 u
" \3 I, g$ j, B6 f4 Q* q- v
/* 报告通信结果*/
% [' A5 Z% z( U- `4 V
if(upp_error_count != 0)
* m7 n# _0 ~- R/ ~+ N3 r! {/ E! c
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 | I0 n/ Y' G7 v+ _, G
else
' j5 N& C$ u7 F3 }$ ^, ]; X5 H
UARTPuts("uPP transfers complete!\n",-2);
+ X# b6 x2 f5 z& z+ s3 v+ m _
) Z; Y( Y1 [) k' ~4 f. @: Y! j
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- \: E9 R1 k( m9 f( n9 H, y
UARTGets(ch,2);
* y- U2 b8 O: }2 b' ] j2 N
UARTPuts("\n", -2);
( @+ d' @/ b0 {6 J
3 s4 v/ g- P2 g$ k
if(ch[0] == 'y')
6 m' V9 h" }# @% d
{
2 g6 ~$ ]' y! D$ U7 j. Q* u
/*打印全部读到的数据*/
! L# d1 p) r# R7 W2 o- a' W; j
for(i=0; i<upp_frame_size; )
3 ~& q; b# j/ j: k% n) E7 u
{
6 h, t% j* T" K: d
for(j=0; j<5; j++)
! e, u) i- F* M w/ [
{
! P4 O% p* J# h' N
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) d" O. i/ B! ~3 E0 k
i++;
! C* S" k L6 x- {, n
//if(i >= 4096)
) d% x$ ~# u* y+ _7 }
// break;
0 b2 I: W6 J4 r* d4 j% ]+ r
% f, g4 d S8 r4 c" m' {" |
}
9 K) w7 p" b9 b( C3 V+ A! ^
UARTPuts("\n",-2);
( B5 S3 d5 }! S' s4 n
}
0 F; q1 f. m! R2 ]1 Z" J- ]* L
}
3 E" B# W. Q7 T H
! j+ b6 Z2 o. u" W% Q8 ^
}
' d5 ?2 T5 `9 ]$ r" M% P
& |0 ~- R: o( c9 f' m6 O
0 E5 f* v- f% {' }8 K
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ O- u# i( i$ `0 |% A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 A: Z# N W* k& p, K" P0 Q6 x
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4