嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: G5 f. z# }" T6 @1 Y
Void UPP_TASK(Void)
& q0 Y4 V' V# k( k
{
8 R# c' k/ o3 R2 a* g+ T9 a" i# g
5 y( f6 {# n# `' D0 c2 m$ c
int i,j,k,target_int_count=2;
. Y5 ~/ _5 V, R7 W7 n
char ch[2];
8 S& y, \2 @, |5 h
$ y& z, w/ D7 R6 o: s
) U( \; ~% ^0 c$ o, N: U# o: H
; f7 n5 T; ~" U
upp_interrupt_count = 0;
' R. s/ j. P4 W, v3 e
upp_error_count = 0;
@$ a9 K8 [5 { S/ T
+ _2 U3 R8 x0 o3 E+ q$ K; Y, s+ f
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. {1 p2 H# Q* O, I( m/ n1 e2 S
// Initialize data buffers
0 v7 u' q2 |" \0 `
for (i = 0; i < upp_frame_size; i++)
0 i9 J1 H& |8 R2 R! d
{
2 A: @% B/ O! y' [9 ^$ N
upp_buffer_b
=i;
, h7 s- v. d) ?) m) D4 @
upp_buffer_a
= 0xDEAD;
3 k9 @2 d0 V: w2 C* _/ I
}
5 v5 |: c. L# ^8 _2 F! Z n9 k
- V$ }* d9 }( J$ k5 W7 J! }6 Y' A
//for(i=0;i<1024;i++)
$ X v5 _ T. s7 S
// temp
=0;
+ l; t+ B l% H! j6 ^& {. V- `- }
) \, q- `# ^5 n
//UPPReset();
8 t6 W# _) O( d/ o+ D, l# f1 s
/*启动UPP DMA传输*/
" P5 w( h7 ~& G: A* }: H
UARTPuts("upp_prog_dma_i\n",-2);
( S9 K; E8 X% W, z0 K0 g F
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' F5 s+ D! N0 a, F
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ V6 M$ b Z( b1 S0 k
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( u' [4 u3 k4 r; t- T
4 C1 ^; i R- o
UARTPuts("upp_prog_dma_i\n",-2);
4 \" u5 o+ p. @' x) H& K
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ C% X3 i0 q$ _ h
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 R _$ h7 Z8 f
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) u4 N. i5 T# V; S: w" C
2 v8 y* d$ e$ s
/*等待UPP传输完毕*/
% Z! @+ X B5 K& h7 [% K
//i=0;
7 \. K6 { U) S" [# _
//j=0;
7 V. J* t1 m+ Q% R( G
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 z( b1 [5 \% Z7 h# p3 Q
{
9 {, j1 C+ v S6 Y! R
/* 测试UPP传输的同时操作普通DDR数据
! e9 H( |- e7 O" I9 O& R
temp
=i;
' n; g. ~: m3 X; Z: m# s; E; e
i++;
% Y% Z$ ?- g3 b* r, C
if(i==1024)
1 u. Y5 k8 S0 t
{
7 S/ j, Y3 p; J ] V4 M; z, m
i=0;
0 d+ Z% Q* Z6 A% p( ~9 F
j++;
, C/ W4 R1 ]7 d( m% r5 K6 r/ V
}
9 q# I; o3 G1 L# p
*/
* o* m# v/ l- @. o
( }1 t' H5 h/ b* M2 V0 e+ Q
asm(" nop");
+ Z5 ]2 @8 ]4 r
4 U) |; ^" k; L% Q$ `; C
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ _) r2 ]( n1 T2 A7 \# W: t- M! {
}
$ C# N: _; F) I
$ p/ J! p4 W) V# }
/*检查UPP传输的数据是否正确 (loopback modes only)*/
y: L/ p: \9 O; `
//UARTprintf( "i=%d\n",i);
( H* m# y* O* l; _9 g$ R6 `
//UARTprintf( "j=%d\n",j);
& R0 J% S* t: Q5 [
UARTPuts("Data mismatch in buffers.\n",-2);
, b' s. H% N5 u( |
if (upp_interrupt_count == 2 && upp_error_count == 0)
- J9 ?' n7 A3 s x F* r% m
{
; ~3 A M+ m* T" l {. B) ]
for (i = 0; i<upp_frame_size; i++)
$ o- I1 N$ }! e9 N
{
0 [# k7 z4 ~# c
if (upp_buffer_a
!= upp_buffer_b
)
$ B6 |0 ~8 H+ p' F1 ^. I6 S1 e
{
8 ?( J* [/ ?9 `( @2 a% B
upp_error_count++;
2 n9 ]) N2 ]5 B# {- h8 \
}
, N' Q) a5 P6 t$ j
}
' ?6 t5 X9 q: a7 j2 k
}
* ]0 k9 e, l# F5 f+ a
' j2 s2 L7 {" u1 `- c! J( L" E% i; o$ R
/* 报告通信结果*/
v* M! H4 e( }5 I$ U7 g! N5 f, E7 ~
if(upp_error_count != 0)
) y) T2 ~2 q3 W8 ]
UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ w' e5 w5 N4 [* v# i v( t
else
# r$ u* h& [6 G
UARTPuts("uPP transfers complete!\n",-2);
% @( M' ?' E: ?, i3 \9 l
1 b4 S" y+ @1 A& c( {+ Y% p; Y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
9 B, q3 {; G0 I3 H( @
UARTGets(ch,2);
1 H+ { V. d% z* K
UARTPuts("\n", -2);
0 c& U% ^- g- b6 M* g8 ^6 q
% |9 y _* @' L; j( `
if(ch[0] == 'y')
& i$ r" e; v8 e& C$ ]' ^
{
, W0 q/ j# D9 ?" H: r9 D- b
/*打印全部读到的数据*/
0 _, M% s* v* r- M% p3 E y2 ^1 \
for(i=0; i<upp_frame_size; )
7 e9 E/ l( U' [! e
{
" g& s2 W& C# v) M
for(j=0; j<5; j++)
}7 O5 V' O. n3 r5 F- k! l+ t
{
1 q- O& |. H2 U) x
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 K N5 T' I# P1 ]6 |
i++;
& ^! K- m: Y! x7 ~- T
//if(i >= 4096)
+ @, M4 q% S$ C+ }; T- A' V
// break;
+ r. ~9 D% o( o* G
8 l! }5 \5 L8 O6 _$ y- l
}
; p8 H- t0 m8 M9 H8 x! x% h
UARTPuts("\n",-2);
( w& b# [% Z; L) L- y
}
% |5 {% F0 A v4 C# c
}
# {8 a& o7 |. Y" |: R5 j$ N4 A
8 A' ]/ g4 e2 r
}
0 [1 K: d) [3 `8 d& N) h
7 m# q" e. U6 ]7 N+ `
0 h! ~8 i8 \2 c3 l, E
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' a1 T- Y! W) Z: x- e2 x. p
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# Q: u. u1 h% R0 l" D1 k
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4