嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) P' |8 c+ X- H- M) j2 K- L
Void UPP_TASK(Void)
5 y1 E, X C- f% f- d# \! z
{
" e" k: ~4 x& z1 Q0 t) v7 z, i% h
8 u$ H% P" w. ~. F
int i,j,k,target_int_count=2;
7 l9 r. J, [7 }; E2 v5 d
char ch[2];
7 V4 X. \% {/ ?, S* f @
' V. M: z% Q$ i# ~9 J: d8 s
|" m' q0 P j8 @( z9 {* C
9 d* t, @& n3 R8 x
upp_interrupt_count = 0;
: g( ~, s6 \# C8 b
upp_error_count = 0;
! Q3 B' z& x# M4 q
/ w3 ?. L! C, v j5 W0 ]6 A, `' A. j
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, w0 G/ ]2 x. v( o1 }7 ?
// Initialize data buffers
. {! p& g, u9 U4 z, Y" a T
for (i = 0; i < upp_frame_size; i++)
1 M3 G( a* v' F5 w5 Z& F) M4 v
{
6 X' y# p2 y/ h# O
upp_buffer_b
=i;
8 n! G3 { J0 g" k
upp_buffer_a
= 0xDEAD;
( M! z# v9 Y5 A' A, E e% R
}
# Q. D# d$ Y# v; b1 e1 e
4 x; {- X- W1 j/ R* e" i
//for(i=0;i<1024;i++)
; e3 B- z) h! L5 W2 }1 W7 }
// temp
=0;
8 g/ a! I+ v, Q5 ~- t, P
4 R/ ?) g0 x8 X7 @$ @! e% P' P" `
//UPPReset();
: v& E+ }/ a2 k/ `+ R0 ~6 M
/*启动UPP DMA传输*/
& g5 F, Q- g, J* G
UARTPuts("upp_prog_dma_i\n",-2);
6 y, N3 g6 R# r
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( [7 e8 P8 i/ i2 D& Z- d# P; G4 y
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- z! u1 X* R1 B' l
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; S- e- c; @/ u5 k5 S1 n6 a
( g6 r% x( Q# `. q7 J
UARTPuts("upp_prog_dma_i\n",-2);
& y! p" o6 u5 `' c# F% X* i! v
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" r& F- A$ q9 G, H! i5 V
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 `) @6 T( t) o' x9 {' G6 p
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
S" K3 X. x" ?- ~7 l
3 i: c) e) H! H$ f* C! q* G" B
/*等待UPP传输完毕*/
1 Q. x' u# K5 r$ b
//i=0;
2 ]$ k. y$ ?6 f( M( n
//j=0;
) q/ }& \- z i: |6 }
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 P3 J3 u" ]2 L9 E1 x& b9 h
{
% E8 n% v7 ]: N1 H( ^2 ^5 w! o
/* 测试UPP传输的同时操作普通DDR数据
- V; q6 w f c" e
temp
=i;
# `: b2 o) z) k( ?* G9 a
i++;
7 q4 e/ Q: v J$ [1 C% p
if(i==1024)
) k6 p3 \: r. v% X [) x; R* k7 S/ r+ {
{
; f6 V- t, c3 G0 z6 y6 d3 ^: L
i=0;
% r2 ~: ^* A0 _! N1 A, G3 Y( h
j++;
! A0 M% d8 A1 P( L" A
}
: N& I! m7 E2 C9 A }
*/
7 m6 v" J# v* a
+ Z8 ? r) n! L1 ^+ z& l
asm(" nop");
- V: D' \: {% g5 m& a' r7 e2 M
$ @1 F. B" w/ h& _' t; A
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& n! u5 Q4 v; Q+ \% I
}
4 @1 e( A$ T7 Q! d$ y
5 T9 r: A$ F( o1 p6 {) X
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 R3 w! m/ l& v' z K! ^
//UARTprintf( "i=%d\n",i);
8 j; ]3 U7 Q* H$ U( @1 L$ ]
//UARTprintf( "j=%d\n",j);
! o2 }, q# S/ F( i5 z: Y0 z T
UARTPuts("Data mismatch in buffers.\n",-2);
; V" i/ M- X6 l* H# [3 Z
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 H7 i2 x4 F- y
{
- M) p5 K. j' {8 Q; `% I9 O3 m& b
for (i = 0; i<upp_frame_size; i++)
, t- J x4 j; I5 G/ T, O4 i
{
& I& |2 Z1 d2 M
if (upp_buffer_a
!= upp_buffer_b
)
: F, j5 L9 B' B3 r3 u5 S W; T' @
{
4 q! _: O9 y/ \/ o5 k; w# S5 ^: H
upp_error_count++;
/ U8 T' `7 K; E5 ~) ?
}
" u3 h& F7 t9 R( O. g/ E
}
: w; {6 y# ?! v9 k" u+ {8 c
}
4 O2 H$ ]: ?9 x
+ D' @6 m9 v- c* y) q5 J
/* 报告通信结果*/
8 k8 s, l2 y- }3 B
if(upp_error_count != 0)
' V5 ^9 E0 s, q$ f- h
UARTprintf( "upp_error_count=%d\n",upp_error_count);
! x- r# c9 i' h( _: @
else
! |, u# s& N" Y4 Q7 l* U" m ]% H
UARTPuts("uPP transfers complete!\n",-2);
' f. p& i: t; h! z7 M8 y. S& j$ H
" r" B6 S5 L0 p c, E/ L5 v( J9 c6 N
UARTPuts("Do you want to print all the data?(y/n) ",-2);
k. Q! E0 X9 E2 K6 _3 u; L7 Z
UARTGets(ch,2);
6 i5 u$ A6 U: |- m% |
UARTPuts("\n", -2);
3 s1 F7 n# s* E2 d
0 n5 e) d: s- d' z9 f
if(ch[0] == 'y')
6 a' [, A( p7 D
{
- O2 a2 f; T* K+ M3 m5 u
/*打印全部读到的数据*/
3 k4 k4 n* S& ?. d% o
for(i=0; i<upp_frame_size; )
4 s( g+ f& p9 h" h7 s2 Q |
{
% j0 y! S r! f5 |0 @& R' l
for(j=0; j<5; j++)
+ M; E, M8 k t" {- Q& T
{
7 N* A- S% y5 s @' L* m& I
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& J! D& {5 P; r, B4 o- l. N
i++;
+ q( |3 K5 W9 R8 N, P6 W* H
//if(i >= 4096)
5 g! r. D$ W0 ~: M5 @3 q) {8 U% c
// break;
& i+ v& r4 S& ]
4 ]- i/ }( O: Z" J& {2 S
}
9 E) l& c5 S4 b0 ~. o: R* K% V* {& g
UARTPuts("\n",-2);
# f. J f& n# A! M
}
7 p2 Z9 w \& t& Q% k8 f
}
/ i$ ^8 Y' t, } M$ U' |
7 t$ L, x+ s1 ~$ J
}
0 @+ Z( e3 e( g$ F. v- W8 K
9 |; I7 \, F) q0 p7 v$ | S
' [' L$ b5 o2 o; [+ E
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: l7 y( y% \/ X, a8 E7 }4 @& _
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* b8 B6 }/ s3 p: l3 q3 j6 H* @8 @( x
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4