嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% B3 p- t$ R) B( O: o
Void UPP_TASK(Void)
2 ~3 \# e; E. C6 m9 m
{
1 _1 [! b! p% W5 P) i8 G
3 w( R" y# f/ t
int i,j,k,target_int_count=2;
7 b' o% }% r3 \% A( c
char ch[2];
- g# `6 N! Z( C F* E# b5 E
: d/ ~3 X" @6 i b! I: @" F
2 l, w7 B. K& J8 B% a3 |4 R7 {. O7 r' [; ?
( f5 ]) o1 g8 [5 y+ K. u
upp_interrupt_count = 0;
: c, K/ k' ^% Z( u
upp_error_count = 0;
2 k: O. v) A/ X0 w- _2 }) q
0 b$ S; K$ h8 s0 M
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& L5 z7 P3 w2 Y. f' V7 T; o
// Initialize data buffers
+ b2 I# W2 V- z) j' x$ ^. ]% F
for (i = 0; i < upp_frame_size; i++)
3 B5 T1 f7 t3 L: ^
{
g. y; q5 C( H4 H$ d4 P
upp_buffer_b
=i;
v- u* A% T5 o, q! o1 S5 Q
upp_buffer_a
= 0xDEAD;
7 D) B, T+ _- }" J! \/ U0 r
}
, m2 o J- U# y& K0 W4 x0 f' ^
$ o, h) e# s5 c% r
//for(i=0;i<1024;i++)
]- O# G/ M3 x! \
// temp
=0;
$ p e" Q' q* o6 {! D/ N! c
8 U( ]% G" y8 D8 n
//UPPReset();
; K- Q5 b% r2 N( h1 `8 n0 z- q# Y
/*启动UPP DMA传输*/
3 ~. E( _% g/ b; R, B, T
UARTPuts("upp_prog_dma_i\n",-2);
: U. j' _& n7 }
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 m# z$ l6 g; T
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 D8 P7 \3 e" @
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 M7 C' a8 E* R
* Y4 p" ]0 M; s1 O/ V
UARTPuts("upp_prog_dma_i\n",-2);
$ ^2 [* F# e5 v! f0 B; M
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: y# I3 n# z" L& g
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ q6 z& E$ J* D4 r
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ w- Q# r1 T# E6 b8 B1 b# R, Q
; N4 W4 v6 y0 T: j) a
/*等待UPP传输完毕*/
$ J s: ~# ?9 a# j
//i=0;
7 q$ k; j- h" }0 f
//j=0;
* N& L! {. j) {) n
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; M1 B$ u' ?! I- y5 Q
{
+ ~4 V2 @" I+ s) b- a
/* 测试UPP传输的同时操作普通DDR数据
; s7 p6 ~% h( E* {
temp
=i;
9 T* X; m! \% T1 {: e
i++;
# ?. ]) i: `0 Y; u! e# R
if(i==1024)
: a& f# O+ p0 ^* B
{
4 ?1 d# U0 `$ u% ~! `( z. {) Y
i=0;
6 c4 ^0 ^9 P; A0 w; \- O
j++;
7 k- o" n- G7 z6 R8 k* X
}
) G L# l( B* K. L
*/
+ U5 _2 X+ C3 ]7 ^! L, v' E
1 }& F3 Z! `( ?5 Z
asm(" nop");
9 b; e7 [9 r R% t
5 P7 a# l7 J* p! ?7 l5 I" f
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' k: H1 h1 I' E# O) ]( ~$ l/ s3 _
}
6 |7 R7 t& h* g, ?
9 A( |$ {. O" m
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 B4 Y" ^8 Z5 ]. ?6 O
//UARTprintf( "i=%d\n",i);
* y X; X5 D$ u( [! ?
//UARTprintf( "j=%d\n",j);
% ?7 U9 K' E |2 y5 L, k
UARTPuts("Data mismatch in buffers.\n",-2);
8 I+ e- ^3 K) C2 L( w0 u# d, S
if (upp_interrupt_count == 2 && upp_error_count == 0)
$ t0 \: N6 H" x) s D ]% g# h$ H; _
{
+ n$ F# y3 B3 O. T
for (i = 0; i<upp_frame_size; i++)
2 Z( A- P7 Y% j/ @ a
{
/ L+ n- [+ [: v4 p' U0 D. H
if (upp_buffer_a
!= upp_buffer_b
)
, z' O! H, M% Q2 F) i1 u
{
+ n5 ^# x. ^8 |6 T1 A
upp_error_count++;
, R A `% Q C H
}
: z B- h {. {) o) ]/ p2 u5 [
}
$ E, Y5 _3 |1 L; D- q3 Z. g. G
}
: X1 r$ o. N, u/ s6 c: h
7 \( E; T7 ~ {
/* 报告通信结果*/
3 P* ~/ W ?: M" _' d$ \) a
if(upp_error_count != 0)
8 \/ a- \" `8 S
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; |( U; K) \/ s) n9 ]9 o& i
else
3 F: l3 z+ [9 U0 G7 g: ]' N
UARTPuts("uPP transfers complete!\n",-2);
$ j& o4 N. b+ @; {" ]& @; r3 o
% A) X$ M9 Y: l9 z9 E4 Q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- l; R6 m7 I' @4 u( E3 W: d/ [5 u
UARTGets(ch,2);
3 r: ?0 S4 G$ `( V: D; ~
UARTPuts("\n", -2);
1 m& B4 B& {4 G" ~% E' j
] B" s/ j) I& z% ]9 v
if(ch[0] == 'y')
& ~$ y3 ?+ x* Y' k' d s
{
5 O( k1 \! m9 _( V( t+ I
/*打印全部读到的数据*/
4 Z- d1 _2 ]! y1 ^
for(i=0; i<upp_frame_size; )
4 }; g3 ?: A' a9 R. j
{
7 @9 ?. |1 `, J4 s$ e
for(j=0; j<5; j++)
`5 g! q: T2 B j, h# n" _+ t
{
5 H1 Y, }% s" W3 }* j7 ]$ i( i& b1 j4 P
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
: n# x6 J% E0 j; y6 z/ p
i++;
7 G9 F4 v- V, p+ l
//if(i >= 4096)
/ y% f; b+ Z z) O1 q2 ^ I% d9 u
// break;
1 [0 V5 c6 [2 b4 R; _. Q
% i# q. U% b, W, m7 T; r
}
# |. w: l; D( d
UARTPuts("\n",-2);
* M' {0 w1 g: k# R" o; R
}
0 W$ n4 {# q; L% E9 K
}
/ P( t" d, ~# b, N: v
& z. r* S, N+ P% H: T6 b% h+ }
}
# F! X/ _$ B0 g- M* F
! t7 A- ~. F$ Z* n/ o
/ {: F l; k" c7 N+ _
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 k7 ?- `; \# e3 W# Z% [
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 x5 D- ?! V2 R+ j4 T% E0 B
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4