嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ H" _" H. B( b/ `4 f% R( ^* v
Void UPP_TASK(Void)
& A0 d' X6 V$ V4 W5 ]7 f3 X
{
4 a0 Z/ }4 e( [6 i8 n( J& `" D
$ F+ p8 E( K" O, { L
int i,j,k,target_int_count=2;
, A* l3 E0 g" F+ u
char ch[2];
; [ V: |/ J( R, s
" {& e2 P: Z& {0 q- F
- |* W% _! j) G" p6 I0 s3 C
4 t- ~- u. U, q( [+ T3 Z: N0 ^
upp_interrupt_count = 0;
: ]+ \7 g& }9 p2 U& A
upp_error_count = 0;
8 i! }: z( l" x/ w
% h, d+ y7 N. c9 i! t6 ^
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 E4 W ^0 `$ {& P4 J; |
// Initialize data buffers
) `) C _( e. i; b2 e+ r. k
for (i = 0; i < upp_frame_size; i++)
; [' f3 G7 P- B/ ` Y
{
/ A- P7 j: D) K. Q. e
upp_buffer_b
=i;
, \" [! n- `( Z' j+ [
upp_buffer_a
= 0xDEAD;
5 j- U! ^# z% I. V* T5 \; D
}
$ ~9 u$ I k8 I1 e2 M7 F5 v
" A" A9 ^5 P: n5 w
//for(i=0;i<1024;i++)
3 s6 Z/ X k# P6 \, E, K
// temp
=0;
% \: s F3 N ~
! g1 R. w. ^, E
//UPPReset();
7 G- h# q8 u' W
/*启动UPP DMA传输*/
# }/ e2 W/ C9 }" s
UARTPuts("upp_prog_dma_i\n",-2);
' f( ]/ ^7 n) F5 a9 G3 I8 K' Y
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, n% z! _% q, b
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 v6 T6 ^# a5 x$ r: n: D& d' ]' m
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, a f/ ], v N2 F6 Y: J
& [+ H! `9 ]0 q- |/ F6 t1 {
UARTPuts("upp_prog_dma_i\n",-2);
5 F( e, t: O, q6 c! `
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 g$ e# E1 I$ S7 b
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# |( ] C. y5 ]" B7 V7 {/ |, @
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- A! d4 U5 [: Y
4 a3 C* {! Q1 J) ]
/*等待UPP传输完毕*/
* h7 }7 P# n- j# b. O8 n
//i=0;
' d* w3 i4 Z h) X+ {
//j=0;
, J4 e! A1 m. H' _$ F8 T( U
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* p4 S7 Z8 S. t8 a
{
: B- ]) l0 K8 a! a" I
/* 测试UPP传输的同时操作普通DDR数据
6 [, ~ ^+ p# X' v$ N/ D5 b- p
temp
=i;
% ^* z" O; ~8 \$ B
i++;
1 H5 ?$ f, _' m- A% v2 P( R
if(i==1024)
% G5 w: U5 d1 B" b
{
* K# B4 T3 D, i/ o+ P; \0 `2 N
i=0;
8 r1 S W/ U5 ?8 m3 }
j++;
8 s; Q8 S% u7 O2 F
}
3 \7 ?0 L) I* Q
*/
; C8 ?# U$ v/ F7 \3 U
% o- N6 ?! Q! D! m) a! S
asm(" nop");
2 O3 j: F* x/ ]* r
6 M' r& M' G0 j+ K
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, I+ ~& K. i: S- [6 p5 U) W
}
6 P6 O: \% _' ?. D
2 y+ g: l" ~, u _
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 w, g/ ]5 j5 j- J s0 M( `
//UARTprintf( "i=%d\n",i);
6 Y! S4 p- g$ N4 m
//UARTprintf( "j=%d\n",j);
1 P# K. C, B6 r4 k, M0 X! s- X
UARTPuts("Data mismatch in buffers.\n",-2);
+ Z c5 O+ [% v# p- B* c
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 M3 O2 e- n: L, [ J! J+ t
{
" _+ `% T. X7 x6 D" \, V$ y# d
for (i = 0; i<upp_frame_size; i++)
( }3 M/ m4 R) w: u
{
9 A! B( o) I% Y# [6 S! K8 _
if (upp_buffer_a
!= upp_buffer_b
)
9 b' C# L0 Z, V- ~; r/ K0 y& p4 ^
{
" B5 d I( H# c+ g
upp_error_count++;
1 U/ x& C ?( ]- |+ @1 ?2 m, r
}
: H, {& p9 n' _9 h3 l
}
" R4 r9 i4 y. ?! N' {; ~7 N
}
3 M+ o5 b( d" Z/ J% I! A9 x9 S/ Q
9 y+ A5 @ P+ O! x
/* 报告通信结果*/
- j4 o7 \! A' X( s9 Y8 l
if(upp_error_count != 0)
. h3 y% E1 o/ d; N
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 e) e4 a0 |$ O' K+ `/ n$ A; n
else
9 \0 i$ q7 @. D0 d. _8 q* A
UARTPuts("uPP transfers complete!\n",-2);
& `" u4 C. j: U4 p: U7 I; R
) E. M5 R/ u# h* Q: E
UARTPuts("Do you want to print all the data?(y/n) ",-2);
! Y/ D: ~7 J) k
UARTGets(ch,2);
; Y" f# [; [" z# W8 K; p- m
UARTPuts("\n", -2);
+ x2 n& ?: t" m
* w$ B" i; F+ H- e* P# q( `
if(ch[0] == 'y')
& v% Y( ]$ p4 Q& v# T/ x
{
, X( E; l: ^, H3 \
/*打印全部读到的数据*/
) J8 V! `5 p$ V
for(i=0; i<upp_frame_size; )
: d. C6 P& x% p/ l" O4 t
{
p% m$ O; e, ]1 @/ ]
for(j=0; j<5; j++)
: G* \6 i8 o, H0 W. b% ?
{
+ j4 F: W3 a, }, u7 C' N
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) X: \- k9 z0 V2 `5 p' `
i++;
( _# a/ g4 b* I1 L4 Y7 T3 n2 F/ o
//if(i >= 4096)
D" b4 Y, y& t6 d2 _
// break;
1 s0 X- n) H& H4 g
+ n, U' n$ c) ^; _0 c- \3 K, @6 D
}
, i1 K [5 h! z- ~- c
UARTPuts("\n",-2);
0 ^) {, U Y" d# m% b
}
0 e% v( e& H6 m& t
}
4 e" S( }- ~3 K. S( T" u) B
" B. E% O, P) j
}
4 J. f6 |" { f, g6 W/ y' l
V( Y2 e( x% x. c
$ T5 n8 r3 n! T9 s; |8 z+ H5 b
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* b2 d: C; E2 p1 B8 ]! f
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* V, r/ W+ c" Y4 ?3 ^
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4