嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( R/ E( h& r; E, G1 ~# A: s
Void UPP_TASK(Void)
8 K. @+ F& @/ \" L6 r: N
{
9 ?5 S) \( ~$ [: N% v5 L
k: I/ y6 ~, K2 f z: B
int i,j,k,target_int_count=2;
. H, y9 \6 f) w4 F
char ch[2];
5 G# T/ S$ J3 i4 J* a( D0 O) x
6 r" Y/ C; U- I9 C! `" J p! w+ O# t/ m1 q
7 _7 x6 ~( d, E2 `- `
; c; P8 {' L# {6 u5 N
upp_interrupt_count = 0;
, y: Y i, C, [) p
upp_error_count = 0;
: M+ [. }/ p/ e# h: z
' K3 }- f! O, _1 |/ |
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 o" O, O6 E l, x* T- B1 ]
// Initialize data buffers
7 }: H' l* t6 N. O1 O
for (i = 0; i < upp_frame_size; i++)
% {. |6 D1 `: d% M7 b& N, q
{
Q7 |7 C* M6 `
upp_buffer_b
=i;
) J9 h3 g* s. t
upp_buffer_a
= 0xDEAD;
# z2 v. o, b& W3 J5 H& T4 c# v- v
}
- \0 ]" W" S* g% g7 m
2 \/ x. G4 [: N% ?9 W! C% ]
//for(i=0;i<1024;i++)
% f& M0 W3 a! U2 a' J
// temp
=0;
7 H5 v4 g8 d$ j* f& B5 m8 r7 w U
' ?5 O7 m( j! I8 G p1 k
//UPPReset();
9 P8 m2 s+ |; P6 c4 V) o# \
/*启动UPP DMA传输*/
/ M1 v @: n' g6 G. W: a, a
UARTPuts("upp_prog_dma_i\n",-2);
- ^7 i' l6 P! c0 w/ w; y$ L: s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: C: s2 J- z9 ]( a" d0 i6 g
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' A* H# ^7 [5 |; l
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 R! J9 U, ^# F
9 i* w6 Q ~ [, J5 V5 u
UARTPuts("upp_prog_dma_i\n",-2);
X8 y6 i3 e* z" Z, v! X
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 F2 N# _. \; E; d5 e
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 U' x! B& x+ x0 Z/ n2 T
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 a" \9 j3 b1 V1 L( a
6 H6 t+ Q. _5 j/ ~: w% h
/*等待UPP传输完毕*/
; k! {* K1 I4 `; W, g1 T- e
//i=0;
' L9 J5 |9 O' U6 K
//j=0;
8 N# N. _& Z2 T3 c: y' r$ t
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 Q" l" T) K2 G/ j4 L7 J
{
- n; [0 j4 X2 G8 |9 o/ b0 d7 T
/* 测试UPP传输的同时操作普通DDR数据
7 r+ k! X7 \- [" l# s4 ~4 Z
temp
=i;
7 j3 J# H' Z. s) _; j
i++;
4 ~. t- ` r1 \5 d- [9 g% Q% \* G
if(i==1024)
/ H+ x! c2 S) x) K
{
) I6 x0 |* M* Q: N3 p( j* v
i=0;
M! F, _. B, \0 c
j++;
( ]5 D2 ~ X5 I7 N1 H) ?5 g
}
3 G& m3 s* Z3 ]
*/
/ C$ C) U3 B* C: u2 u2 \
2 u2 s P# w5 Z( M5 t9 U. v
asm(" nop");
9 W/ g2 u0 _) |
5 `& @! f/ \; U8 g1 Y1 ?/ ~% w
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: e0 {5 R& m! V2 {0 t! a' O: |3 Y
}
/ P$ H& C8 G0 q$ l
1 }- @4 n8 w8 \5 j' v
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. [ X- P3 ?6 ?3 S s! ]) U
//UARTprintf( "i=%d\n",i);
5 L6 u& d- d8 E6 ?! h$ t) l
//UARTprintf( "j=%d\n",j);
4 d2 z' I( i. E$ t
UARTPuts("Data mismatch in buffers.\n",-2);
% r3 C4 z( M2 E9 n0 a, _) U
if (upp_interrupt_count == 2 && upp_error_count == 0)
: {4 M* M4 ?% r& r4 _- y, ^% K9 z
{
$ D, {' y$ r, R% n
for (i = 0; i<upp_frame_size; i++)
( ?8 g! p+ c# F: ?% s# ^+ i) w
{
M- B9 c0 B" I6 Y
if (upp_buffer_a
!= upp_buffer_b
)
8 v' Q1 _! Q: y6 c; h2 d
{
& D/ G! \- Y8 b) P
upp_error_count++;
6 y) @; D9 ^% ~4 r. O* m( a0 I' I
}
5 L. [& ]; [6 z! K( f
}
8 D4 e0 W. O2 V; z% s
}
9 i/ p P1 N; n
, ]+ l) b! ~5 J( _. c
/* 报告通信结果*/
) L7 B/ V$ G, d0 g0 e
if(upp_error_count != 0)
1 [' P ~, W, m" ~
UARTprintf( "upp_error_count=%d\n",upp_error_count);
& m4 `* u/ n1 e6 X4 v
else
2 V, `: l& M: g6 R
UARTPuts("uPP transfers complete!\n",-2);
- V" H$ o3 z" W9 d
9 n4 r/ I% w+ b, p
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 f3 z! j3 d. c; T- L6 `$ ^
UARTGets(ch,2);
+ r. D8 y$ v3 Y( e
UARTPuts("\n", -2);
1 `2 p8 ~- ~( c6 Z) x) M" j6 y
+ D4 i: [5 |) N* v' s7 X
if(ch[0] == 'y')
! q+ u/ M+ r( Q! [6 _2 ^
{
! O: _' b* C/ W; |9 M3 e
/*打印全部读到的数据*/
6 ]. [) r/ Z9 W' L
for(i=0; i<upp_frame_size; )
4 o* L+ M% _8 n$ C
{
+ F; o* W2 V1 d( t* |( x8 S6 @
for(j=0; j<5; j++)
$ @* V# y5 ^$ h
{
" Y1 e# L7 u2 o; z$ w4 A
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, |: `3 {4 e2 |% }
i++;
. a# Z8 x' M$ Z. w1 n, Q+ j, x
//if(i >= 4096)
- V- t- B- C5 d* G" ]/ q' e
// break;
' ]$ p$ O9 w; ~
: \' A! a+ @2 {# \- F
}
0 L8 R8 @2 C4 @* M. v0 s% G, p
UARTPuts("\n",-2);
$ B* I: r, H3 a6 E( o1 S- e9 h
}
( I% X8 R' Y# `3 R8 x0 ?8 Y/ c& g
}
$ E: _, ?& r5 @
* H$ w; W* t: y' f) {
}
" l3 _5 E i& L; G. f7 ~+ r
2 a: q2 o o: C- [/ \, m
" x. j l: }5 D3 O
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: v2 v9 R6 C: n% E9 M8 m. H" O
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ h2 |8 C1 N) a
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4