嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' d8 H; z( r4 y0 r* j, y1 y9 x
Void UPP_TASK(Void)
5 Y- n% f4 d4 X
{
% r5 d: V+ c9 V
' Q& {% E; D# J9 \) _, H
int i,j,k,target_int_count=2;
% F3 `/ B/ A/ [
char ch[2];
+ F [, H, o$ }
, x' l. z( o, H) y E- V
; |+ E2 h; o) C0 }1 r: X
3 i5 x5 y* a- I% q2 w Z2 `7 Z
upp_interrupt_count = 0;
- {; A8 H0 Z0 Y$ j8 K" I- [
upp_error_count = 0;
9 D0 o2 t7 b! R5 \: o
5 U, a8 C: L# I5 K% M
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; p1 W. z3 B2 C7 G8 N2 g
// Initialize data buffers
& L% D/ `4 c% M) l; T
for (i = 0; i < upp_frame_size; i++)
2 j# S- W' Z) Q- w; `0 V" O
{
/ b5 L G, Z; F6 M& D; S
upp_buffer_b
=i;
% h6 {$ l% F, O5 X4 x
upp_buffer_a
= 0xDEAD;
* j3 \2 N" ^; X. o9 I7 _( X- A E
}
' B K6 u, q8 h+ ^0 s- [. r5 j( N+ ~
2 ~! h- Q8 z1 q' V
//for(i=0;i<1024;i++)
5 V% h% i7 ?8 b
// temp
=0;
! [- j0 F% D9 V, a# x8 s9 H7 w4 T/ \
0 u0 Q+ t0 S2 o: n5 F4 P
//UPPReset();
2 _3 D" u. I5 A. U8 ?* A
/*启动UPP DMA传输*/
3 G; u" g; S7 o) j* {
UARTPuts("upp_prog_dma_i\n",-2);
3 W- }+ n2 f9 ^
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ d" {- m$ @5 P% n( F+ d
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* Y" Q; e( `% U2 _' ^
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' k; H, I) t! m) W5 J' H! Z
- V" y8 L/ Y; e# G
UARTPuts("upp_prog_dma_i\n",-2);
( h* Y o! m* B1 h7 b" q$ s7 e, i
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 R, _- w" ]/ N$ L1 s2 X( X
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
Q9 U; M8 X8 S [
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* |! h0 L, A" D3 E
- L+ @5 p. h" J; L) }# s
/*等待UPP传输完毕*/
3 T4 T4 t% [" [+ v( Z
//i=0;
' o4 `! O/ F% j- F3 _: u
//j=0;
" D( T6 p# k1 q8 v* V( L
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! e; A' [' J- S+ p. ~
{
/ v5 [" Z9 m9 s Y, A5 y
/* 测试UPP传输的同时操作普通DDR数据
+ k5 k# n/ p } o
temp
=i;
' y2 C2 L+ J. V: f
i++;
! F- `) b, G5 [; b) m0 `
if(i==1024)
4 N/ d/ j0 K, S; K
{
# I8 a1 @ j" L. h: x; R
i=0;
( @7 V6 K+ b. K
j++;
! V$ u& b8 ^' e, {* S9 o
}
. M- }+ \% t. o0 n
*/
% Y6 O$ d9 u' x& r) Q5 t
' b, x V, I+ {0 ]! U7 x* [; R
asm(" nop");
* r9 T6 a. X2 Y0 t
f; q; z' f- x% p: k
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 y2 |# C# K q! T
}
! M/ t) ~4 {/ J" ^
, u% x7 c4 K$ l
/*检查UPP传输的数据是否正确 (loopback modes only)*/
6 v+ N4 t, s% N- m3 e- D4 o' Q
//UARTprintf( "i=%d\n",i);
- y: _) V, I& d5 e
//UARTprintf( "j=%d\n",j);
& W% S3 q8 V0 q; T; h, E
UARTPuts("Data mismatch in buffers.\n",-2);
# Y* X' v8 Z/ u6 |
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 L- R7 @+ {% g% N4 Q8 m+ \
{
7 k: w% g) U3 \, J' c0 {
for (i = 0; i<upp_frame_size; i++)
0 K! e# X! T: a5 p- ~
{
) G! t! b! Q2 w3 q
if (upp_buffer_a
!= upp_buffer_b
)
4 q3 G- t% P4 u# ?+ g+ p3 E1 L* W! ?
{
$ k7 R9 v: k7 h: L1 z4 }
upp_error_count++;
, }/ B) V k7 R8 N! E# _. J
}
, G, l! K. Q1 m; }$ A
}
# i2 F+ Q! A& j' l
}
( R% w! J( s! P$ v; {5 ?2 [, y' a4 L
/ z6 l" C3 s, K; ?; u* v
/* 报告通信结果*/
3 e& L* J# W5 @. \, [+ A3 ^
if(upp_error_count != 0)
4 y+ m' ^. @! M
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 O+ x" T) O* t& |& ]; u
else
+ [. w Z p/ ]3 n+ S0 z$ O
UARTPuts("uPP transfers complete!\n",-2);
; E! [; D: P" ~3 Y* ~ ]# d
4 c V# }* H3 ~- r
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) _# I: v/ g& [0 O8 O% ?0 d# T; k: w
UARTGets(ch,2);
+ Z6 M* ]8 l7 e7 l
UARTPuts("\n", -2);
: V8 S9 W( W6 v8 j( a4 L
' y5 x: ]7 c( {3 Z g- j" A* R6 i
if(ch[0] == 'y')
# l, b& g( N5 t8 a. D; x
{
7 ?; d$ l6 k6 P
/*打印全部读到的数据*/
2 `/ S' F8 {6 a ?! s" `
for(i=0; i<upp_frame_size; )
\; B: F7 G7 T% R4 [
{
. U' {( n! i" Z& O
for(j=0; j<5; j++)
8 ]- [: {! _$ z. P {2 T
{
7 _$ Q0 C5 N) b/ D2 f
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( p* n$ _3 h ]7 S* z5 C( ~5 {
i++;
" F( Q1 ~2 j& d8 ~3 _: D3 }
//if(i >= 4096)
$ x& R+ q2 l% F# `: P8 j
// break;
! J' \) l+ a# R) n
; w; i8 W. f: M
}
8 @5 ^0 Y2 i, D
UARTPuts("\n",-2);
9 N* }& |! M W, y
}
: B7 e3 i7 [- f8 ]6 C& a/ l% [- b
}
8 j" Q q. y6 D, C! T1 T
+ [! y' k C( W8 L% v3 k: j
}
6 ~1 G2 i3 O. q3 o
B# c! f. r6 `2 p( Z/ R
- i$ G% v% B6 ~5 F( {4 _
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 n' K+ }, `6 v/ E
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 d3 J7 ?) v1 e* J/ W, R+ G
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4