标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?: [ _& x- J" O# ~" h# ? Void UPP_TASK(Void) 3 F& k% x) i3 Z- `5 |' M( S{ 0 U: f- \9 `' S% R3 o+ T5 t2 N5 u6 \9 I1 {: h1 b" ?; ~9 O
int i,j,k,target_int_count=2;8 e; V* P" D4 t1 W/ E4 V, P L( G
char ch[2];' T2 d2 d4 x A* P7 w% n. K
% O4 J u. Z; _6 j& v
2 l6 Q" z3 G' [( n8 q4 E5 ^ R
7 b( u; o, A* Y: S5 R
upp_interrupt_count = 0; & D- l" s2 L" C upp_error_count = 0;) W# A9 Z9 L) a4 {$ _- [
/ M5 d$ [8 ?4 Y* O) R6 i* t UARTPuts("\tResetting uPP buffers...\r\n",-2); . q& F3 q4 O7 W) }! w. N // Initialize data buffers ( m; T; D. }+ e, z7 c for (i = 0; i < upp_frame_size; i++)& Y/ T0 U) V, S6 Q1 B
{" O% s. R# X R6 D
upp_buffer_b =i; ' l7 ]! c/ O+ N) e upp_buffer_a = 0xDEAD; ; S( |9 K3 g: e5 c& v2 J* G }( d( V: T$ i6 J! A5 X, d! I7 `
4 n) J9 C0 m J
//for(i=0;i<1024;i++). h! L; z( |$ b% j* j
// temp=0;2 y9 {' ]6 z5 w' a- s
6 ]2 Q4 l1 w; M v$ U6 d6 A //UPPReset();& y$ k6 l G4 }( c; O% G6 \" H
/*启动UPP DMA传输*/6 h) g' Y \8 ?! k" ?, D
UARTPuts("upp_prog_dma_i\n",-2); - n- S& V% g8 J( { upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a; / a0 G" s) b Z' u upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);% G5 J6 T( n5 D$ A6 B& e
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16); $ i ^) o* _+ j& ?: s- v d3 _/ Y: e1 }9 Q UARTPuts("upp_prog_dma_i\n",-2);) k# d+ R) f' E8 N+ a: W) s; y
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b; * H6 f- u% c, x. K( p: B upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); : u3 z" j8 ]6 H6 M9 k% j7 H- S upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);: ^0 g+ ~& o, [# |
* ^ u& y4 o6 l+ e8 Z" d |
/*等待UPP传输完毕*/ 9 D4 H" t7 t5 M. K( U //i=0; 8 S& f. x) _, Q& v/ u //j=0;) \9 B" ?( ~" | n
while (upp_interrupt_count < target_int_count && upp_error_count == 0) # J( ~* w& g$ N' O( Q# [1 ^ { ! U8 d- o' `5 o4 @6 Y /* 测试UPP传输的同时操作普通DDR数据 4 {( `2 ]; b7 k3 Y1 R& Y temp=i;) {! p7 x8 b: o& G
i++; 6 E0 f0 ~& Y7 v: d if(i==1024) ' r' @: W3 k! Z( M( Y+ Q: r6 q {) ^& j7 ?1 q! x. `! c, E' \
i=0;% L K$ F; N. i, b+ k {
j++;( o, x; G, [, p: K) ]' X
} 2 T* q5 a2 V- O$ A. F */ ' N. o( b4 w& }: t$ O! {5 W7 N. N& b T/ f1 K, s
asm(" nop");5 M# Y' @- ^. v5 R; t$ e1 ~
3 e u, Q, {. T: c: Q W //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);% f' X( c r/ h2 D9 b, W* e
} ( N! p4 b8 t) y& I. x1 {; H. D2 \9 v; C' i+ ~
/*检查UPP传输的数据是否正确 (loopback modes only)*/ , g* c: v8 E% u7 V6 ]" E //UARTprintf( "i=%d\n",i); 0 U4 U6 X0 V2 b! o8 R f" l: W& e //UARTprintf( "j=%d\n",j); ) x: g, m4 K& H6 l7 m. d/ ` UARTPuts("Data mismatch in buffers.\n",-2);2 p' V( p5 F" f% |( [
if (upp_interrupt_count == 2 && upp_error_count == 0)! h/ L p& Q& T, o! T3 |' z
{ ; l# r( s; F$ g3 U/ W; i for (i = 0; i<upp_frame_size; i++) 2 \4 R7 |9 x6 [. M+ d" S0 I8 T G7 { {9 v2 E$ Z' L& a4 L# x% o6 n
if (upp_buffer_a != upp_buffer_b), X+ G% V' |# o% K' O
{) x3 e5 {6 O1 t8 \1 R7 J% u& `- n
upp_error_count++;% j7 J! z, a% e3 D% R7 u" e
}$ v/ Q1 t1 d4 R9 z' o
} A3 c' _; I, x% x+ e6 L: [* T0 w
}) A" B( D) t; ^! a
. C7 k+ k% ]; O* C; P# g8 i
/* 报告通信结果*/7 [ c" J; }3 b# L1 i- o# @* d( G
if(upp_error_count != 0)* a+ v7 m0 ?# C9 t
UARTprintf( "upp_error_count=%d\n",upp_error_count); ! h9 H% X/ r1 B' k! t- i else5 l4 G$ R( q0 R8 {; v P0 P5 _
UARTPuts("uPP transfers complete!\n",-2);" W0 V: F/ J) J: `* m
1 m) Z. r& k+ t% H! n UARTPuts("Do you want to print all the data?(y/n) ",-2);& n$ I( I- V- _5 n1 e
UARTGets(ch,2); " Q9 ]. O9 v7 w. S# n4 Z+ K2 D UARTPuts("\n", -2);$ w" ]2 t w& H7 f. u6 p