嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! x8 Y2 C" J8 B0 v
Void UPP_TASK(Void)
( S* Z+ }' i8 s# K/ @4 `* [( e
{
7 J4 N$ T, \; q% r& l# h, M6 P+ c T
7 M( m8 ~- x T" A# l
int i,j,k,target_int_count=2;
. K% d% }$ Z2 P' A# V( }
char ch[2];
R& }; s% q, R% w4 P$ D
# U8 r* C; E) v5 d3 E* S
* `- H) Y' k4 M# s0 R! o5 J: @) f
6 n2 F7 i, b$ R: I! n$ l
upp_interrupt_count = 0;
, ?0 f. [* B# o: x3 V0 t6 r8 m, x/ z
upp_error_count = 0;
! K w8 C0 P# z
o+ o' l9 r% h: T
UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ X" P4 k G7 G
// Initialize data buffers
: a! {; g7 i4 i- U! }
for (i = 0; i < upp_frame_size; i++)
# v3 u0 V! ^2 W) A6 U
{
) L0 @% h( o& x d& _7 O( o
upp_buffer_b
=i;
% F# e% U' Q* H" O8 g
upp_buffer_a
= 0xDEAD;
6 F' |9 Q) Y. n/ ^+ R9 P
}
2 U$ W) |' B7 F) h
0 @/ ~1 H7 `: N* \1 |! J- S
//for(i=0;i<1024;i++)
5 \" K& ~9 b, P# h* G& i$ i5 X
// temp
=0;
3 I: I+ ]) j) Z6 _' e3 n7 @ X
8 K% R1 ?" B) y
//UPPReset();
8 E/ n+ {' _" m, c
/*启动UPP DMA传输*/
% |" }1 f$ x$ Q( T" \$ Z, G- v3 @
UARTPuts("upp_prog_dma_i\n",-2);
) b# X6 t# l+ s, g' [5 V# O
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 r+ }, ` ^: j3 k" n
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, A7 H0 |! J+ Q' y c3 R7 X; T: |
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" _2 T7 v' F- ]5 _( t# M1 a j
+ _* }+ i- {8 `8 [' m$ b+ w" ^ s
UARTPuts("upp_prog_dma_i\n",-2);
W6 T0 }) [# j- Z
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! A2 D) p) R" f K6 y% P2 o$ H
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ E7 Y7 g) P% p
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 Y5 {% B/ |. b0 K; U ~! G
. W/ O+ {4 a/ z0 V2 z7 I. M
/*等待UPP传输完毕*/
7 O- s+ d6 u7 K% a" r
//i=0;
: W% s" u2 b2 I( W3 l. `4 b" e
//j=0;
# G3 F$ D9 t1 ~8 C& n
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! z, e- Q( d' Q3 O) C4 |$ Z
{
. { @6 F* v. k0 ]* g* p
/* 测试UPP传输的同时操作普通DDR数据
8 W+ T% ^) {: t- S& X( S1 D
temp
=i;
0 |& E: Z# N( X& I8 p" Z# {! H6 h
i++;
- y. |7 o. j e9 w: z* {
if(i==1024)
& B# \. @1 Z9 a" J' L3 S
{
& D9 ]/ v o1 m, M$ R& k
i=0;
/ L% N+ ~( {) i M p# o/ L
j++;
- Y* A) ?0 ~$ G, p: L( A( F0 e
}
2 q; i/ ?& X9 O- K- {( v" Q
*/
2 x2 a7 o6 n) q5 z O+ L) C, P2 _
8 t' z" L' C/ z1 J- r- b
asm(" nop");
( I; @6 {6 f3 S; i& s
; s& M4 v0 E- O8 S* M9 B. a
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# o3 Y3 N3 |' ?+ p) i; F5 z! a
}
$ }) Y& \2 c6 i. E) M. y B# |! z. ^
. W' }1 B5 l* ~
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( m0 @9 M8 M+ P4 S0 X4 ~- ?3 P6 O
//UARTprintf( "i=%d\n",i);
% ]: q% x3 [1 j
//UARTprintf( "j=%d\n",j);
7 z3 n- n$ b4 {# h1 R
UARTPuts("Data mismatch in buffers.\n",-2);
& \' l" N6 l# u5 S) P( p
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 ]0 J/ C% m3 L- u/ [- _& n
{
& `% C4 z+ G& v$ `/ G
for (i = 0; i<upp_frame_size; i++)
$ j' r4 H/ j7 W/ o( x ^
{
. L9 [) @& C# l# n( W+ j% O
if (upp_buffer_a
!= upp_buffer_b
)
. L) a( P8 r. L( z5 y- l6 H
{
. x, ?' ~* ]5 ?0 q' \
upp_error_count++;
; l% j' V+ A: F3 Z+ k$ d( T3 A. c
}
1 X! F1 }/ B7 ?" K0 V2 O
}
7 P; l5 {2 |6 |7 V+ U7 Z
}
& d( @- `2 H; D3 N4 `9 s. L% U3 [; m
( b* |8 X" q1 O+ m$ _
/* 报告通信结果*/
7 I( g3 o& a" @2 d2 M$ |) {" k
if(upp_error_count != 0)
% a/ ~7 Q. _) U) G* k7 ]
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: s3 O+ E2 F' B0 \, _2 ~
else
6 g! S9 ]7 O" K9 c
UARTPuts("uPP transfers complete!\n",-2);
! Z9 c0 F9 i2 a) i* d. B3 G& s
- {$ H3 l( p# j n
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ A' |$ Y" ]) L' U
UARTGets(ch,2);
# O( L5 r& H( \( e: Z) D0 d
UARTPuts("\n", -2);
5 G6 B, [, z0 ^9 G3 C/ i; _
4 F( M# ?& f# @4 J
if(ch[0] == 'y')
0 B# B8 E' \1 k# b) C1 k5 B
{
5 P& s% F) Y/ G1 q6 A1 j! s3 v6 b
/*打印全部读到的数据*/
% V4 A/ m! `# E: B
for(i=0; i<upp_frame_size; )
7 F+ l2 I H8 v0 c# W
{
% c$ f' q" I: g) W0 e
for(j=0; j<5; j++)
% @# p: h* C) t* R2 j- r4 M
{
# q. y$ R; y. }8 {# J7 L
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 i# X. x/ u* A( z6 y: j/ X6 x
i++;
/ H, [( [/ F$ p2 ]- b
//if(i >= 4096)
6 c5 v" F5 \ D$ P
// break;
: D. p4 Z3 O" Q' ~# t. T) l
5 E& l8 r* O, T, ]) @: o/ g. `3 F
}
7 s3 K9 j4 H' A* g
UARTPuts("\n",-2);
/ z, S ?0 z, r" i4 E$ }
}
$ P7 C7 ?& L1 g- }% v* [
}
, y% i7 _2 \8 i! c+ k; {& T
$ ]1 f: A @" [. T9 C; U7 D
}
8 P4 `1 e( U1 |- S5 t4 e
) p; T% R& J o2 g7 U
( I, r; U: D8 F1 o$ I# K
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 {2 ~) P$ V* P* `- B
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 E& \% F* ]2 U0 w
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4