嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ ~; X m5 [% l
Void UPP_TASK(Void)
$ X. f( p/ v1 r- I. ^0 w
{
8 N. g$ _# i* a9 p
0 j# K4 u" S Z) {3 t
int i,j,k,target_int_count=2;
/ u: m, l. L7 y( H3 e( B, p" y
char ch[2];
4 v3 C# X9 j8 g
& N9 U9 y# R2 i
/ I! d3 |' G( u/ U$ |
2 ?, f; F0 p7 ]8 N/ j- D# d7 ?
upp_interrupt_count = 0;
4 F/ D% i. L3 t! J- Y
upp_error_count = 0;
8 t* K; K$ |! c; O- W
, t* l- |9 K \5 \/ }
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( f6 M2 E4 e6 s- f+ c8 L, r
// Initialize data buffers
; H( W2 t6 x! Y8 z' Y8 v
for (i = 0; i < upp_frame_size; i++)
. t1 G: p' g$ M) E& q% }2 J
{
h) w3 x( l- D7 t/ C1 U
upp_buffer_b
=i;
% ~: ]* X6 ^- y4 X, M* L: Z6 K
upp_buffer_a
= 0xDEAD;
7 Y+ `. K& B; I) r
}
; X8 G5 o4 p4 D u8 A! c" b
. Q8 O, C' \3 h$ U0 E4 m/ ^
//for(i=0;i<1024;i++)
! t3 f7 ?* @* S4 n
// temp
=0;
. k) x1 T3 [7 a0 z# P# x% t
7 E7 n. e) A" l# c ]6 `
//UPPReset();
% r. q- N/ r: a% \. S
/*启动UPP DMA传输*/
; @) c. E* _# p* b9 r8 E0 q+ D
UARTPuts("upp_prog_dma_i\n",-2);
% t7 ^/ e4 P8 x% b. o
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 c" ^" z3 x7 x& V8 q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' e0 P0 x9 v. f; {6 G
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 a2 T2 o" W, q" w$ M k
( I; C$ Y! F, }
UARTPuts("upp_prog_dma_i\n",-2);
' h! X# M1 b: E( y* N o0 t
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' g" E2 e7 d" Z& i- X
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 `. \- h4 P3 x; M9 K: O& Q1 n
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
& y2 [1 m( n5 {* J2 S/ I; g1 }
! H) v2 R2 w$ X3 M
/*等待UPP传输完毕*/
1 r/ n# g. V# C
//i=0;
( T# k* _+ K4 \) L; n- D
//j=0;
' e( i+ b7 W! u, l J8 U+ t+ }
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 d( f# D/ m" n% w6 H+ i6 g8 S
{
% I, }) p7 E; s7 x7 n( G L$ R
/* 测试UPP传输的同时操作普通DDR数据
( Y& L* O3 r- D _" F) v+ o) E
temp
=i;
, k) e/ C* o; @& n+ N. ]
i++;
, J8 N8 e' @: r) k$ Q3 i2 c( T
if(i==1024)
# \/ W" \* ^3 m5 n5 f9 P+ f: b
{
a4 ~2 X0 g. d0 t+ y# [( U, s
i=0;
% M" O5 d8 q3 r' E0 U6 n6 ]6 e
j++;
1 L) w8 R* C- S; G0 q) j2 \/ `
}
8 e6 w2 ?4 ~% y
*/
4 J1 T- B5 U: T' V& j U
# e' S3 e5 ^: V# X$ C; l& H5 v
asm(" nop");
0 M! t5 Z" a6 ~. m$ k
$ w7 D, E: s2 D8 e) ^
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" ?$ p: p8 g1 w% u& E$ q) J0 v
}
! r2 W9 I2 z) j m
: U) Z4 N% U! D7 C
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 p4 b x) N* B- [
//UARTprintf( "i=%d\n",i);
$ A3 _% g0 ]1 p3 P/ b4 N& |
//UARTprintf( "j=%d\n",j);
( p( `0 w2 W. c2 d0 j
UARTPuts("Data mismatch in buffers.\n",-2);
7 m4 a" L9 }9 @
if (upp_interrupt_count == 2 && upp_error_count == 0)
; U, j! O3 f$ U7 i0 r
{
- C4 I3 \2 v0 v0 S
for (i = 0; i<upp_frame_size; i++)
6 E: V/ ]% o" r L0 a k
{
% R2 [( s8 u9 s7 A
if (upp_buffer_a
!= upp_buffer_b
)
5 g# B5 c& D& G3 v6 |( r: V
{
+ t. ?: a8 r `! N V$ t0 _/ ^
upp_error_count++;
9 T# a, U6 J' F/ i& n
}
( h0 r" p( z$ x' Y9 U3 o/ Q
}
" Y+ z- j7 M3 E- ]( l
}
x6 v9 W5 \& r4 n/ E: }
7 P5 n8 O [' [
/* 报告通信结果*/
# J. g3 M0 ?/ J% v' g
if(upp_error_count != 0)
; v' r Y4 v8 E- w5 g1 O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- N5 E [9 U9 l0 Y; _3 p3 E7 e
else
% w6 Y, f7 r. c8 d0 s0 G( l+ e
UARTPuts("uPP transfers complete!\n",-2);
# C1 B/ R1 F# o `3 E
: C8 Z7 k3 y7 W# b( Y* {
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 j8 j5 O# w2 f6 k M1 [
UARTGets(ch,2);
" m- C. p& y8 P$ a: Z4 h
UARTPuts("\n", -2);
3 S; E$ `. D* a3 y' v+ k' H$ ~
0 K4 a M' \5 o
if(ch[0] == 'y')
- i F$ m, C, j5 r; U1 {8 Z
{
$ s5 {+ n M2 ?& K+ v1 h8 L! N
/*打印全部读到的数据*/
* u* ~* g% a+ X* u# T& M' P
for(i=0; i<upp_frame_size; )
s& k& k6 S+ o L0 b& [: ?
{
3 Y0 M$ r4 ~& W( a- l$ h
for(j=0; j<5; j++)
% v1 U& B, y+ d5 T9 H3 c
{
( E3 t' S# i C" z! @) a. S
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
: a! _; `. p W' d$ V1 f6 N. @6 v1 V
i++;
3 J( G' w' h; a6 n1 t% k
//if(i >= 4096)
7 z k6 X/ f: g$ V) i( z
// break;
6 F: w' J/ `# k$ } A! o
4 H, y% l2 _; M- d/ `
}
+ l7 ]2 y; K) _% ~: V
UARTPuts("\n",-2);
# O0 @3 M3 j1 }
}
7 y* V& r+ `4 j; I2 N
}
/ e$ h* }8 T7 ~
1 N& `7 Z4 c, v
}
) n! Q3 g0 |2 [- s' Y' s0 D( @
& j; N0 P" U5 w+ k: t
2 E& u( o) X4 J2 N' D8 Q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
# K+ \5 L+ g* u+ C
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, w4 A2 F% N* e
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4