嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 `! ], z2 j8 H% s; Y" Q. q
Void UPP_TASK(Void)
- O* R1 u- ]9 [. O- H- j! t& `' W
{
) h% y( f3 D9 V1 y5 t/ ?( x
+ u K4 |% b1 z# s
int i,j,k,target_int_count=2;
& e% }' D# a4 J6 b$ V8 q( H% T+ t
char ch[2];
, y8 W7 t6 @8 X: }6 G
& K1 }: |+ J4 K0 B
& U0 b2 Z* ~" J" T1 I5 m* z
7 Q3 W: |/ U* s6 R% {6 U
upp_interrupt_count = 0;
# \3 F3 G7 D0 \, z
upp_error_count = 0;
" p2 _' j% k- T5 m+ R8 H) _2 o/ l0 ]7 o
& _; J2 _, d! V2 { o \0 S; M1 s
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 ^7 t( p; g1 t. Y/ d0 @7 j( h
// Initialize data buffers
4 l# p4 ?! G( k
for (i = 0; i < upp_frame_size; i++)
3 {( L7 W# q; Q) T6 o+ c4 y" y
{
, b, H% Y' @( A" ~ i4 i
upp_buffer_b
=i;
2 @6 K2 P5 Y3 a. z. _: ~% z
upp_buffer_a
= 0xDEAD;
! d1 I1 R: ~1 `# j1 S2 V. C
}
, A# z8 p u. @# Y- o
6 D+ Z) ^/ |! t% Z1 p, d
//for(i=0;i<1024;i++)
! }1 s5 T0 E: y! y6 S( j
// temp
=0;
0 Y6 o/ I) T$ J7 k2 e' x
9 q/ C0 w- L+ S$ G0 ^8 X; i
//UPPReset();
$ Q4 [$ ?- s$ @8 D3 k# N) }
/*启动UPP DMA传输*/
5 X% F$ q* } m0 D0 a9 h# r( @/ A
UARTPuts("upp_prog_dma_i\n",-2);
1 u$ F9 b( b' J$ ^$ ?& v
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" F# u, h4 w0 X. J, I) i& u3 C' b
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, j$ n6 v% u+ z" V' B" @
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 F9 U5 Y. f: {& [# j& ~! ?
4 |6 ^# i/ {5 k6 n9 {) [1 |
UARTPuts("upp_prog_dma_i\n",-2);
0 N+ [ q; Y0 c0 f6 L
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- g5 m$ c) ?9 ]* G& @6 s$ t E
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. B% B- T" s. e" v' a' O1 a. R5 s3 Y8 Y
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ E9 R2 w! f2 J: ]+ M' D9 @
; j6 h2 ^1 h+ Y4 |; h% {' P) V
/*等待UPP传输完毕*/
* y' }' y$ ~7 L7 g5 y9 \, n
//i=0;
) x y3 k9 Z, h$ x7 _6 d5 z( P
//j=0;
- c @3 U- x9 g/ y: T2 z I1 [9 p
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" E* R. @( p: \0 d0 O: a
{
; ^+ M% G: X2 j. y% _. `: v8 L
/* 测试UPP传输的同时操作普通DDR数据
! j8 T L! {# D! I' R/ F4 c
temp
=i;
) h! p b1 w; w' l
i++;
% X6 P: F1 n+ L) F9 h' `
if(i==1024)
5 `- F$ p* [* z# Y
{
, \+ D2 u# W/ e1 l) ^, q; e
i=0;
& E3 Z1 R- N! L
j++;
* Y; ~: S; @1 x7 f
}
* ]- \- n- r; N# q' C$ n- A! z
*/
; O1 k, P6 r9 @+ ]/ m# y
* v! A! \( q8 t; a: y
asm(" nop");
8 J: c* @% |3 [' P4 ]5 f) b! ]
' G- L# |; u& E# {. R! o' d% s, D; N
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
r+ }( O* j6 _$ O& p
}
! F9 x3 `: I5 P2 c" U
/ |( l& {# L! k& |9 P" x3 L
/*检查UPP传输的数据是否正确 (loopback modes only)*/
K M; u# g |% i9 q6 |
//UARTprintf( "i=%d\n",i);
& l2 g( s2 W7 F
//UARTprintf( "j=%d\n",j);
& |) ^) ?2 o! ]$ ^) N R2 P
UARTPuts("Data mismatch in buffers.\n",-2);
2 \, j4 ^; g; i6 G! c, b
if (upp_interrupt_count == 2 && upp_error_count == 0)
# ^! z k# i, M* E
{
1 X, k# k4 B6 }8 {* }3 q
for (i = 0; i<upp_frame_size; i++)
2 ?* _ F6 W& s. c
{
# F, [/ z6 S3 N8 j0 b
if (upp_buffer_a
!= upp_buffer_b
)
: s3 y9 p& m- r4 t; `& V( ` l
{
M! n# P1 b3 ?
upp_error_count++;
+ K# W* A8 K7 D
}
+ a- w% g$ a+ v3 ~
}
' O7 v; y" \# G: f2 B' h# o5 M. j+ l$ Z
}
# I3 Y& j% ^! k% s j
# X& m* D' G0 D* G* n1 @
/* 报告通信结果*/
) }" @" B; u/ T- k
if(upp_error_count != 0)
7 T; ^+ H0 u0 e! S- G
UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ J/ O, L$ f# t% M: F# P- [7 t0 v
else
8 c4 V8 R/ `$ c/ L1 t
UARTPuts("uPP transfers complete!\n",-2);
8 W w9 G4 z) ^% m
4 ~. E3 X8 i: s; X
UARTPuts("Do you want to print all the data?(y/n) ",-2);
" O; A" e( s2 |, j! i' E u
UARTGets(ch,2);
, H5 E$ |1 R' E5 L
UARTPuts("\n", -2);
, @+ \$ d f" E6 b
: _9 w; s7 C0 v# ]- p, w
if(ch[0] == 'y')
8 l1 w' S. D: ]; {0 R
{
, F2 v+ Q7 c" a b6 X7 y1 I* \* H
/*打印全部读到的数据*/
) Y$ U' M |/ q0 N& Q& @
for(i=0; i<upp_frame_size; )
; N R4 N- I- r/ n
{
' o' \6 M: Y. j& [, t* F5 i# c
for(j=0; j<5; j++)
1 C1 H* f5 r- N" k
{
% A9 I2 `2 t) p
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- |0 s u! w$ v( Z/ `
i++;
7 n5 R; Y" B6 V3 _, W
//if(i >= 4096)
$ [! L$ Z5 j g' l, T7 N
// break;
! g* y/ u% t$ i; [2 y
6 ?5 o3 P5 n/ E. n$ `
}
. S2 T0 N4 T9 S3 x+ g* L
UARTPuts("\n",-2);
3 p' R( D# ]6 Q2 E0 T1 V
}
9 R) ^2 P, h% J& B! I/ V9 b
}
) ?& c* g7 n4 [! O
6 j6 I) k0 R4 g y5 t# m; b9 ?# p
}
* ^0 p/ d5 ]) k* Z( @! ?
' N' ^4 h5 i, { S+ ~
4 r" V# k( T" V2 T
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ u' P% y3 C# u
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 l% @2 R- B8 g7 E7 M
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4