嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# n; U: f( I& L
Void UPP_TASK(Void)
5 ^4 i7 s* p) x9 j$ s
{
: Y5 E, S8 M5 \9 p
8 V* ` R2 g, l( ^6 i0 j* [
int i,j,k,target_int_count=2;
# K6 Y) }4 h- B4 c* t
char ch[2];
9 C$ T! H; H& b! m8 O
9 y" v! e0 `# G/ E0 P. o0 e x
: E9 s; V0 \" f; M
( k4 g+ W, c% q+ F% K$ W( ~
upp_interrupt_count = 0;
) U3 v8 y5 C, U) [, g6 J
upp_error_count = 0;
/ K% Y- `- ?1 `0 W4 f z1 H
7 i5 P1 H' k0 K. r6 ?; u# |8 c6 s
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% ?% ^; j. F$ G# a* S# U4 o1 h9 g
// Initialize data buffers
; C: ~" C8 X+ _
for (i = 0; i < upp_frame_size; i++)
5 P7 h6 X1 X5 u- r6 J
{
w6 J N" G. p
upp_buffer_b
=i;
Y0 r8 k, [- S6 o5 [8 b
upp_buffer_a
= 0xDEAD;
9 b& j& ~7 A) ^- J* k
}
/ d( A( }9 c/ l$ F- q6 e
. \& v a/ [% q2 z
//for(i=0;i<1024;i++)
) F: b; ~# Y9 f# r4 B$ i
// temp
=0;
1 A( _" J; m. G' _& `2 c5 g* t
7 \! y0 q. F+ y3 i" W7 z8 R' L% c7 V
//UPPReset();
4 ?! Z+ |1 P' w! `4 `9 Q$ l, s& I
/*启动UPP DMA传输*/
V" ^! ?8 D- Y/ Z. [
UARTPuts("upp_prog_dma_i\n",-2);
' ?) S6 _+ {- t
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, d2 f/ ~ I1 l8 C
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- D4 _6 d1 @, d4 z! o9 l, s
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 B' P& `" a% \
, w/ l) ~ k" ?) ]
UARTPuts("upp_prog_dma_i\n",-2);
2 A2 w, Y. j4 ~& _# F
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" @) `+ X9 [5 ~7 z' i
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% f, R; k: @* J% U" Q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" W$ I1 @# o9 P+ A
% {( g8 ?+ y4 B: i
/*等待UPP传输完毕*/
% G1 z- e7 I2 H) |; [9 j$ h
//i=0;
+ U5 |. B# H0 F; Y: S6 R
//j=0;
& w. a- l8 K: B2 @- C4 n
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 Z4 E) c0 u6 u/ c, Z& X
{
3 O/ H q6 \0 n. I% U* q5 b
/* 测试UPP传输的同时操作普通DDR数据
1 a) t0 q/ C7 s/ f1 f7 L# I% N% N
temp
=i;
- D) Y: x1 L5 T! A7 F
i++;
; L; ~. S+ T$ {4 h: z
if(i==1024)
' e. j5 o. g) [0 d0 q
{
& C) a, l: N% M, ]5 w* Q' l
i=0;
/ K/ O B% z4 x
j++;
7 k% m$ q2 E; E* u# N: K. }" p
}
" }! B% |, a/ _# E7 g
*/
3 N* Q: A/ \; [) y* ~* T
: G* _% N( U9 P- S! K
asm(" nop");
: B' \. V3 ?! m
( D1 m+ p$ |* ?1 Q" ~
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 i1 s9 _$ X5 O1 |
}
1 k( `$ R, k7 k b
5 T3 U+ ?( {) f- ?1 b
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 y! s: R% _3 f% y) v, H
//UARTprintf( "i=%d\n",i);
, w, D; E+ I& p4 f: K5 e, L/ \
//UARTprintf( "j=%d\n",j);
# P) e' u1 m, D
UARTPuts("Data mismatch in buffers.\n",-2);
! b. n; B% e8 E
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 s- t4 f2 R2 O* x
{
S6 X* @. ~ a I+ N
for (i = 0; i<upp_frame_size; i++)
$ a; [% t9 u) W# _, m1 a
{
5 W* L' q4 }6 H7 t7 Q3 m
if (upp_buffer_a
!= upp_buffer_b
)
1 N* L1 Q( n+ `. g" Z0 a+ p, M
{
# T4 r+ P# E6 V* I' _1 v! b5 f
upp_error_count++;
2 S% e9 V/ [: n' ]# X6 S1 `
}
2 U5 z: o+ F8 [% n
}
/ x0 ]; _% P% w! N
}
8 l8 V: d6 H3 L2 ^0 i( b& l
. v7 I" F3 {0 J- }! h* R" Z
/* 报告通信结果*/
6 k& w5 p. `- {2 M6 `7 ^) C
if(upp_error_count != 0)
* K- L3 [! D& B8 T* d0 h, m
UARTprintf( "upp_error_count=%d\n",upp_error_count);
' x/ @9 n% h8 i( s; n
else
) e1 o) r* `& P
UARTPuts("uPP transfers complete!\n",-2);
( x W% ~" y0 ~; C% }' o' f
9 F' o( S+ a: y% B
UARTPuts("Do you want to print all the data?(y/n) ",-2);
9 k: B8 D+ ^ |% {: i1 \/ S2 D
UARTGets(ch,2);
4 C- u! i L% K
UARTPuts("\n", -2);
3 @3 B# |" ?% e5 ~- T' a1 {
" v/ s- U, W) e* o
if(ch[0] == 'y')
9 A$ z4 Q0 G! i) _' K8 t, c
{
5 D0 \# U$ V0 O/ {" T' i( {; Q6 Z
/*打印全部读到的数据*/
1 r: W- X9 ^* u
for(i=0; i<upp_frame_size; )
( N& U! }/ H$ F7 u$ [/ ~
{
: N! E; o% I3 R) D9 B9 }& h
for(j=0; j<5; j++)
) E; N) @+ k6 H1 x3 k
{
- `! D# A# ~3 e: {# s* `
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. I" Z# Y5 R2 K# ?4 E$ Q% g
i++;
8 Z3 X8 j) ]: q h2 [, h3 B4 E
//if(i >= 4096)
" e9 r6 y3 n }8 [
// break;
4 V( I% O& K' V. M* Z: S1 t( l- D
$ ~3 J) `! B @5 T' f
}
! N5 D2 R. P6 g' Z) i1 n
UARTPuts("\n",-2);
# S' o# F, P8 ]; v2 D/ w# n. A
}
$ y6 U8 r# g$ v3 f) N
}
0 [; s3 f8 f: G3 D+ x2 v) |, h
# O: B4 M( z) u" {# ~
}
- ?9 t& b, B* c# F
) f, o; Y% p9 R$ U: |, Z- z# f
- [9 r1 w" }" ~) o( g" \! }
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 u( C( c$ {5 }$ T3 @4 c$ E( G
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% e( ?9 y6 s/ _3 K
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4