嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, i0 r B- P: q) R/ u9 o
Void UPP_TASK(Void)
+ K, R( _! p+ \5 S0 d4 c
{
+ G; z0 {) {9 |6 s6 D2 i( K# F
' T% t+ a2 Q* ]* Y9 N3 A
int i,j,k,target_int_count=2;
& j" z, d- ^# K2 }+ O
char ch[2];
' W: T7 c; G8 H
' C4 R7 ]/ l7 U& i
2 l) J: V: v4 N6 J% b# s
7 q4 @# T0 x6 L( l a3 r3 F
upp_interrupt_count = 0;
8 t# F1 A: D9 q& k
upp_error_count = 0;
( U- {7 J3 v( d$ X
* I/ E h1 R# C3 e: Z4 [: w
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( `) @* U' T( i! a3 T; o
// Initialize data buffers
6 l. a0 _7 f' M7 q0 Z9 I# c
for (i = 0; i < upp_frame_size; i++)
: w3 Q! W! F" `2 k( g5 _
{
5 R, [- p* e) O, t0 v+ G
upp_buffer_b
=i;
- z' `. z& j% ~$ ^, W: ~) J7 z
upp_buffer_a
= 0xDEAD;
, H2 q% {( \$ Q% [
}
8 d, a; Z6 {. t3 l( B1 Z. F
. ]" x% y* B& s- X M, ^
//for(i=0;i<1024;i++)
- i# ?/ G3 T) a" ^' ]+ `4 ^
// temp
=0;
) l4 E7 c8 B8 j! K7 G# e, M
* ]. H l5 z( }' k/ _/ k+ A& B+ {1 p
//UPPReset();
0 k$ Q% F7 Q* [; f
/*启动UPP DMA传输*/
. e7 @! f0 V* @* v
UARTPuts("upp_prog_dma_i\n",-2);
) R" i3 Q/ d6 C2 O5 s; P
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 v/ ?7 _4 {/ O* C
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 \, [1 {& q% i! m% S
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; q! S2 B0 T$ O8 \8 W
9 w0 l7 ?4 o( m: ?. J
UARTPuts("upp_prog_dma_i\n",-2);
- ]: j6 C% U& i) |
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 C8 A3 E8 i. D
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 q9 n3 ?% U( G* U3 t+ S: |
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% v5 d6 U* A1 W# T, n/ H
6 p* l- E8 I: l+ Z/ D0 R$ l; }
/*等待UPP传输完毕*/
6 R; |$ s- W6 L/ |
//i=0;
$ z& i, B o) ~
//j=0;
3 B. ~; }) Q5 L. a% F
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ E7 I) u8 f8 t6 F. Q
{
1 B# x) Q, t! [
/* 测试UPP传输的同时操作普通DDR数据
% V# n! |) Y a, a' A
temp
=i;
3 }. \; ]0 E; f3 ?8 m
i++;
4 k, D1 O% s4 K( }! N. S3 R
if(i==1024)
* g& i0 i9 |( C
{
) F* M# O+ s* y, y) _
i=0;
/ n8 M" T) X. [! ~9 s+ T+ F
j++;
0 `3 d0 d9 [8 f4 H% ~+ E
}
3 P. `/ Y4 |, K6 b
*/
, a, u8 _8 r( I& j w, m: u2 `% I
k# x3 I$ k `; o
asm(" nop");
) G" M2 O) A8 U* U7 m: ?0 {
/ D6 E, b9 G7 P4 s. C2 P
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ r% X$ i; v& `0 o0 u$ _9 G
}
2 l2 J `' x6 q! P* b& A5 j' s
z" _4 k, v" z2 x6 B7 O: N0 j: o
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 b9 c. Y: t- m$ I
//UARTprintf( "i=%d\n",i);
k3 a l: ]6 @0 E- ?( |7 G, C0 Q
//UARTprintf( "j=%d\n",j);
, }1 ], i3 q# b. u% q
UARTPuts("Data mismatch in buffers.\n",-2);
m. n7 u* S$ t$ Q& X( G$ c
if (upp_interrupt_count == 2 && upp_error_count == 0)
" ]0 P" E1 \/ d( ]* R9 }( y
{
. ^7 f2 t4 K U) ?9 d9 k6 o
for (i = 0; i<upp_frame_size; i++)
0 w, o; D4 M& b5 S
{
y1 ~1 F4 A9 h/ d; [: R
if (upp_buffer_a
!= upp_buffer_b
)
0 M t `% t1 `; i' i) t( S3 C4 n
{
' ^" l0 _2 ^$ _/ w
upp_error_count++;
5 n0 {9 Q5 D+ X) q* ]0 x. s% `
}
' ^) g: _/ h& [9 V+ z; R9 W# l1 v
}
6 {$ p; k& D* M- V
}
/ C: P$ S7 H7 _
: w! w( [2 c' j% [
/* 报告通信结果*/
4 I u& ]: r7 k! q
if(upp_error_count != 0)
3 F8 `8 r5 B2 R7 z/ o! f6 @
UARTprintf( "upp_error_count=%d\n",upp_error_count);
' t* S. S, \! n
else
6 M4 B* p1 k" m3 E' ^
UARTPuts("uPP transfers complete!\n",-2);
9 e4 H# e' k3 q1 J
6 ?6 |4 y* w/ ?6 z' |" c4 ?
UARTPuts("Do you want to print all the data?(y/n) ",-2);
" T( f' T. J$ B1 `7 { f8 d
UARTGets(ch,2);
7 W9 n6 n) X. {3 J: H& J; q% w
UARTPuts("\n", -2);
R$ [" c0 H$ ^: e
8 e) m. `; J) a; v @ H0 M
if(ch[0] == 'y')
4 _+ {- R/ B1 I7 {
{
( e7 m8 l: U/ m. E
/*打印全部读到的数据*/
3 Q6 w& u* Z; e! h
for(i=0; i<upp_frame_size; )
2 A8 V: f. a! J: b, R
{
2 C2 w m% Z$ F
for(j=0; j<5; j++)
@8 Q6 Y; a4 U: N* u6 o
{
" X# D0 T+ }$ _: y+ N5 {& _
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# x5 [0 `, o5 X. T4 }
i++;
0 \) O( I4 _4 u
//if(i >= 4096)
' W i0 C$ R9 \5 G
// break;
) U0 S' u* B3 N* M
( w! z! }; e/ v, ?
}
9 `7 e( U* x* ?/ y# D
UARTPuts("\n",-2);
$ x: G' ^6 N# N5 f, e! i' D3 T
}
# G, F# Z6 Q4 ]( |+ @0 R0 ?9 V- P5 A+ ?
}
& r- o, X# H# s1 ]' X% d T
9 k+ [4 _- d/ T" q# G% n
}
! i8 C4 Y; P/ u
% O8 b. A# F4 e
" `8 g& Y8 r% O5 }
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. _! R2 q: N9 j3 W
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 Q! L6 ~6 d$ m* G
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4