嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
l9 G5 W) k' W6 K+ J1 ]. L
Void UPP_TASK(Void)
3 u( }2 c& ]1 [. G# e& Z
{
4 W9 n( \% \& A6 k6 Q
) d2 I0 A( t7 q
int i,j,k,target_int_count=2;
; M. I, ]9 y6 Z
char ch[2];
V3 ~% B& v+ b
8 v6 q) H* v3 f2 Q/ g; N! P$ `& G
& p+ H; b! l7 `& w! U
, `9 k1 C) l0 Z% x" p
upp_interrupt_count = 0;
+ a6 _+ i0 s% r$ j) g( } K
upp_error_count = 0;
5 L' v9 M: t+ P; u
: b4 X) n* s& ]: q
UARTPuts("\tResetting uPP buffers...\r\n",-2);
r( J/ F2 ?! A! b- a0 r2 S
// Initialize data buffers
- ~7 `& K6 r0 h% `, W) h
for (i = 0; i < upp_frame_size; i++)
) K/ p1 e+ D1 M% m. i/ A5 ]
{
1 e! z) I. B9 T6 s2 H* M7 f
upp_buffer_b
=i;
+ [; ]$ p# h3 V& Y/ J
upp_buffer_a
= 0xDEAD;
1 c% |( b- q# C+ x0 f% k
}
) H8 o7 v6 `% P/ Y3 m3 j
# j3 ]6 F; N% R
//for(i=0;i<1024;i++)
3 y6 z' T+ ~& z( \% j
// temp
=0;
; d4 I$ P* W K) Y; f' H2 n' H
9 M& {& {7 i- i" d" ^
//UPPReset();
1 k) o& W8 o, s( U
/*启动UPP DMA传输*/
& l& Y& Z9 V& \; m
UARTPuts("upp_prog_dma_i\n",-2);
. e7 \, Q, X! H$ \
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
z* r K+ a7 m3 r3 d
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ g2 G4 q( n8 \2 \4 h- C
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, N) T- X) U/ B6 K3 v
6 f" s( [1 b6 b$ @8 L
UARTPuts("upp_prog_dma_i\n",-2);
5 u2 f, r! m' {8 y# o
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 Z& w& ?; c) K) j( O
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 o7 M" U4 s4 ?: R
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 g+ S& t' H% E+ \! C2 H
/ B" d% u2 F2 L; g g& y" i' j
/*等待UPP传输完毕*/
% \; B5 k* @6 c5 f
//i=0;
0 O3 v5 E1 L3 q" W
//j=0;
) G/ E4 N7 t; \2 f
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, Z! H4 W! e0 G e
{
8 o ] `+ j6 Q! t+ g
/* 测试UPP传输的同时操作普通DDR数据
- A; a8 O3 j C$ q% G! z
temp
=i;
# f! g( j7 ^1 Q
i++;
) w L5 z" J8 C1 o3 ]: g
if(i==1024)
: k4 l$ ?: c) s9 c/ o
{
( \2 M9 Q3 p m+ X
i=0;
# v7 }5 p; _6 u$ t$ \
j++;
, ]6 q- J3 ~2 z4 Q
}
8 ? Z7 u& p' @/ r8 m
*/
( \# P# @, u, S2 {* k+ Q8 \7 u
( C4 r" {5 t" `
asm(" nop");
% e. o+ o/ \ C
6 l% N2 B0 J" P E! q3 @ |7 [! ?
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 y$ D1 |/ O$ w- }" Y& Y
}
4 B6 n. C7 i' b% B* N
6 H' c+ a9 `8 d" f/ L- u
/*检查UPP传输的数据是否正确 (loopback modes only)*/
! H& k/ p) i) ~/ C4 R
//UARTprintf( "i=%d\n",i);
4 I& G; ~+ m' ~& \
//UARTprintf( "j=%d\n",j);
/ W. l" {. l: i1 r
UARTPuts("Data mismatch in buffers.\n",-2);
+ A) Q7 _" a5 X$ Y
if (upp_interrupt_count == 2 && upp_error_count == 0)
- ^& H2 H% _' }2 a2 C
{
1 p* A. h% X' o/ D2 f
for (i = 0; i<upp_frame_size; i++)
8 {2 j$ c' A8 k& F
{
. w" n; i7 k2 _- h9 H2 p6 G d
if (upp_buffer_a
!= upp_buffer_b
)
1 `' M& [* w# i$ y
{
% K5 F2 j+ ~ `
upp_error_count++;
6 q' \( m; [$ e3 u% k
}
5 o& M) G& C( O* O( c
}
) B% ]) ]0 x% K! G# X
}
' g; ~ _, L6 `% E7 o$ M
. f: ~" ~! q/ ^& m
/* 报告通信结果*/
" |) d1 W% }: R, j* H
if(upp_error_count != 0)
5 j1 I$ M6 m7 d. o! X
UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ w, C4 `5 r0 f: C3 i
else
& m$ R! e) X3 M: v8 ?2 t7 G ]
UARTPuts("uPP transfers complete!\n",-2);
8 C5 K! Y6 R0 _& h9 ~
* t& I l# G" f. I! y: B' M
UARTPuts("Do you want to print all the data?(y/n) ",-2);
" U3 ~0 I- C( q* a3 y
UARTGets(ch,2);
) M2 _% R. t7 }; t3 `% J
UARTPuts("\n", -2);
, u1 {1 Z; E; z5 }6 U: i
1 Z7 k D' [# k8 P- t4 f$ w7 Z
if(ch[0] == 'y')
# Q2 S' U3 O7 s
{
& k6 S, Y3 D: j) k6 r
/*打印全部读到的数据*/
& d3 I# @, M S1 V1 a3 T
for(i=0; i<upp_frame_size; )
; @; X" _' U* g' T1 X [# R, e
{
2 x, n3 ]! N4 z; U2 Z% X9 K
for(j=0; j<5; j++)
7 [* i* @% `( B- a( H
{
3 P/ l# g% J: R
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
0 m/ M+ C6 ]1 a: ]! T. m! [
i++;
5 f* I" o- c* C
//if(i >= 4096)
8 o& \/ W1 @: W
// break;
: G: ?5 V7 N& b T$ f6 b1 h# Q A1 \
+ [! K9 z' ] \
}
1 L, H9 z. `% W& E6 b
UARTPuts("\n",-2);
( y: T7 k$ ?1 N
}
2 c- t0 _+ B; Y) Y
}
5 s" e- P l8 \
' m" L) H9 R( v% B. |
}
/ m! Z3 K, @* [# E- {- |
* f2 J. t7 Y8 o: w. R. l7 A( y
& x: u/ M( z! L
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% j. b# u5 L1 M0 a4 ]6 i
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 \. ~, y0 `- \, D& K' n
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4