嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- _, B1 s% h3 Z) Y7 L# I
Void UPP_TASK(Void)
1 b! L X" Z7 s
{
|9 H( r/ ^" H. [3 [
6 r( c" E' ?" P( F; Y+ G! C7 `% Z
int i,j,k,target_int_count=2;
( J& }, j% H) z6 Z
char ch[2];
- g, m$ ?' G/ \6 {
. r n7 N5 B. w1 A6 m* i9 T
9 p0 w* ?. _$ `% X/ f
" P. n& Q& B6 {. e, |( f8 E; _
upp_interrupt_count = 0;
) t/ H; e+ g2 {
upp_error_count = 0;
6 t" v3 [. S8 G
j# i* t/ z7 g$ P' T' v4 J
UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 k! L' C4 N1 l) x6 c
// Initialize data buffers
8 |7 s1 F8 `5 b. B1 `0 d
for (i = 0; i < upp_frame_size; i++)
- H/ P, a1 b0 c4 B6 b6 }
{
; w6 I, [ J2 k, l, n& P
upp_buffer_b
=i;
2 V& Q% H# l5 P* X+ M. I: i: s4 z
upp_buffer_a
= 0xDEAD;
% m' C; e5 R/ `# O6 y/ F
}
" Z7 f" n! J) ^! k+ \& f/ \# o
8 _+ Z/ i m& V6 |1 T4 x3 J% P
//for(i=0;i<1024;i++)
! c- K5 z8 G, k4 M$ b5 y
// temp
=0;
4 p) ~# Y. a% p, A
2 o0 d2 @. V+ C% g1 p, m
//UPPReset();
' c {1 @! o( c S$ q" Y+ ?) }
/*启动UPP DMA传输*/
& C# m+ p3 x% i$ P+ C; s6 K5 s: v
UARTPuts("upp_prog_dma_i\n",-2);
" p( ]" r, {. e. z" ^2 L6 V/ T
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 v) @8 `6 w/ N; {4 r4 h
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: d) C- A/ C- ]( y# @' I' O; O6 ]# s
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& I" Y+ M7 K/ H
$ K% X0 `% W0 u6 }1 I! R. y" o: w
UARTPuts("upp_prog_dma_i\n",-2);
4 D+ L& v5 j$ |, _9 w
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' r( a$ B0 o0 V6 P( I( h, I3 s! A
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) p1 I0 ?# a3 s
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 t( P( ?6 C, i* E
+ K) i6 } `! k" _2 w9 P
/*等待UPP传输完毕*/
+ q3 K% o4 ?, h& n! b% e/ u# s- F
//i=0;
3 a* r+ C5 L; @6 O
//j=0;
7 U7 Y U: \; h- c, Y$ C0 B
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 M1 q, u, C' ~6 C9 c! Z% B
{
7 Z% G* X+ z: A" b+ Y" r& T( U1 Z. U( M
/* 测试UPP传输的同时操作普通DDR数据
g0 N1 v" m N, h
temp
=i;
Y2 I/ Z# B/ Z
i++;
6 W# W# x5 T j
if(i==1024)
; h" P" o4 J5 |2 Y
{
7 Y- j8 [+ }# C! U, d
i=0;
2 r7 i, K7 H1 x6 i) _
j++;
2 z+ f% i. @! h' y$ ~ B: t
}
4 T. {+ } l' {6 g& d
*/
, o% u' X+ ]/ z0 H
+ F' p: I$ {7 h9 i: i+ _
asm(" nop");
; g( K, u3 i- q" K- V. i
& ]( H; |" C( {# n% I, J% l
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 T1 F+ p/ }. ~9 Q6 N# L
}
& N2 ~- g2 T% K" S, n9 E4 P
5 C) ^* B/ h$ y7 ]1 Q1 j
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 K4 O1 f& e, P
//UARTprintf( "i=%d\n",i);
$ r4 O Q; a: h* j) _7 i
//UARTprintf( "j=%d\n",j);
- z7 S2 V# t5 l. K" v S7 y# U
UARTPuts("Data mismatch in buffers.\n",-2);
4 ~& B8 b9 a C/ E
if (upp_interrupt_count == 2 && upp_error_count == 0)
: k6 H5 m: z9 {! X& Y+ u
{
# ?& m+ R$ I- \( g
for (i = 0; i<upp_frame_size; i++)
9 e3 g' o. J ~* O3 i; Q( p
{
, l9 d6 q% D9 h& p
if (upp_buffer_a
!= upp_buffer_b
)
' Q* S' P" l& [
{
' O% C) q) b- h4 [0 J
upp_error_count++;
5 h9 D' M h# p
}
6 A3 @1 a6 _% |8 F9 }# ` c- H
}
0 \, I8 |9 I) K4 f( V, `
}
) c$ z0 h; o0 W6 W* y
! | f5 k- H4 R& j# P
/* 报告通信结果*/
0 w1 L. ?2 J8 F' L- O, D
if(upp_error_count != 0)
0 J# U" I( ]9 j$ p6 p6 ^
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ m; V4 y# ^5 y3 {/ H
else
! t' y+ ^4 D$ k5 w5 N; V
UARTPuts("uPP transfers complete!\n",-2);
% x- x! X! D1 }7 _
# J2 u' V! }4 T2 j7 d
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 l3 d& E# f' q7 x* t
UARTGets(ch,2);
, _8 W2 p0 m. z1 r4 o+ ^
UARTPuts("\n", -2);
0 c5 ?+ {/ q3 t3 V" `
' J0 ?8 b& F* Y. V7 _. I
if(ch[0] == 'y')
; Z, f/ l2 x, H7 S7 Z& [! y
{
( u# ]9 [7 e( m5 c- ~/ J n
/*打印全部读到的数据*/
$ E6 b+ s" k: }
for(i=0; i<upp_frame_size; )
% Y' O% |. {/ X5 c) G/ o. x* D
{
) z/ k# b5 }- a2 g% t& E
for(j=0; j<5; j++)
- a0 q3 m! ]+ N, E1 I/ U7 M
{
- {1 v& w) {4 c, Q
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ `8 b. h0 M5 P z' d" r% S
i++;
4 C, ^6 s5 z L$ ?) |5 x9 E3 T
//if(i >= 4096)
+ S1 L8 m6 ~1 k3 h5 B, q/ g, m# H7 Z
// break;
4 A% p% y, \+ u9 m W3 I( m
$ k& k& M! m4 K `& K" `
}
; F# R: q: z5 |% j$ Q
UARTPuts("\n",-2);
x5 \; S8 Z3 Z4 P
}
+ B8 g5 `! n/ ? V! U- Q
}
5 e# `$ B5 b' I \
/ A2 D: _' W# V: B
}
" D3 \/ q+ j4 d$ @5 Z3 Z8 L( ]
# p& k; |5 k8 s
2 p# j5 C$ q" l' N4 \2 v
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 v/ m1 d7 q2 E3 ~
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 O: C0 E5 v( m9 b8 K
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4