嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 _) _ l5 m- f: R; a3 U
Void UPP_TASK(Void)
7 S$ g8 Z9 u$ q& O4 ~# I$ m
{
u8 H. [2 ^: {6 {
' c& @- w5 U# E- }* z9 F, B, ~1 ?
int i,j,k,target_int_count=2;
% ^* I9 }0 J0 i8 X
char ch[2];
- a: s, D4 P$ h, u. _3 @
) E7 N6 O' P- [3 {- E) u& ^% f" G
! e6 q) k6 X/ w7 D( @
( ]' V2 l8 b! e7 [" `
upp_interrupt_count = 0;
9 I% Z! z5 z7 ?% e3 F3 U% v9 w, W
upp_error_count = 0;
9 i& {6 @8 g# `/ L" v4 M& k1 z
& A' o' @/ W- ]9 i8 x9 x
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ e1 W) P8 n ?; @' p3 g
// Initialize data buffers
) G$ R5 Z& N# Z( Q3 G: V
for (i = 0; i < upp_frame_size; i++)
- n- Y$ R( Q; w7 r& ^8 ?3 A
{
+ Z' x: G$ m% F& N/ i
upp_buffer_b
=i;
/ W( k8 P8 p& o' U# z! y6 O) B# s K
upp_buffer_a
= 0xDEAD;
( h# |, }* a0 X8 R
}
2 F2 E% O, v9 D- P1 H; n
8 J6 R7 o! y0 E; o, P" b' O
//for(i=0;i<1024;i++)
, [1 e. h2 C! V+ a* X- h8 h
// temp
=0;
" G; \6 ]6 Y6 w9 K
* [0 g" g3 \" k9 s: C
//UPPReset();
# I, @4 ^* i) W# Q% }
/*启动UPP DMA传输*/
z: n( Z+ h; C/ j9 s4 |4 B4 u" ^
UARTPuts("upp_prog_dma_i\n",-2);
$ k' X; O: _8 q. B g( y
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 |. `8 C7 D s7 U3 e
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 g/ r0 W* q" y1 x% X' F
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 f, U6 c" {! [4 ~, H
0 N9 ` ~! |1 B; Q2 U
UARTPuts("upp_prog_dma_i\n",-2);
- U( o' Q* N; t6 T% ?( m
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: i. D1 m6 F! F5 [9 Y
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; |( u0 g7 O; u6 Y; r* E2 _5 l
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 I2 E. ?9 f8 C) g* [1 F7 \9 ]
- D" R4 U; q* q6 n
/*等待UPP传输完毕*/
% l! k1 w/ c" Z' I% b' f( z* O; ` }
//i=0;
3 I4 ]" Z& H* `# F% k& M
//j=0;
$ {8 b7 Z- A* x7 L! B( x' u
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ E# e& Y# R+ }* S' d
{
8 Y0 _3 V( `0 O3 E$ Y' ~6 u$ ], A, \
/* 测试UPP传输的同时操作普通DDR数据
! _; p/ X2 j- u
temp
=i;
& {# G0 [3 l, T" b1 o1 P1 D
i++;
5 S- ^+ Z9 p$ l( u
if(i==1024)
7 E8 J0 d- L+ H7 a6 t4 U# r, s! v
{
9 I. U2 v1 g, t# r
i=0;
- }+ ]7 F/ T8 u7 g" ?
j++;
- t- y1 C/ |6 H
}
/ @4 z* Q5 _" k7 k. ~) o
*/
d0 f6 n' G0 Z! Q
! A8 x6 A4 {/ N; H
asm(" nop");
9 I/ O, z+ R$ i( a2 g" ]
, L: @9 B/ ?. _
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 h9 ]7 A/ o a) g! K
}
2 R7 o3 e" @+ E7 q/ s
# Y& x1 B% U, @& X' Q) U7 \2 k
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 S) _: K+ K) H* H' l; w5 ?
//UARTprintf( "i=%d\n",i);
5 p b/ b, ?9 p/ q
//UARTprintf( "j=%d\n",j);
6 L/ Z. l- d8 [5 D$ I. j2 _1 f$ M
UARTPuts("Data mismatch in buffers.\n",-2);
: A2 I$ n6 [- x7 v/ P1 s9 o
if (upp_interrupt_count == 2 && upp_error_count == 0)
* F6 I- Z( v4 x2 k% u0 i: }
{
7 X5 y9 k8 Y( _. X; Y9 R" d# Y3 }
for (i = 0; i<upp_frame_size; i++)
+ c, O: R: m! @4 W: z
{
3 d; a3 U5 x. Y8 G
if (upp_buffer_a
!= upp_buffer_b
)
% h3 ]3 ^$ a: z' m* C) ~
{
2 o, s0 ~/ c* E; k) C& z
upp_error_count++;
: j+ G+ R1 A# Y
}
2 R% @/ j, b/ k3 |5 n$ S, }
}
2 Z+ u8 ~- V. _( Z
}
7 V6 `$ W: B, z8 H% H
# Y0 n$ N# [5 w2 E, w
/* 报告通信结果*/
4 @ ]- Q) G H& l0 X
if(upp_error_count != 0)
3 q/ I7 K% j5 `, ^! i& A. ]
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: [) v7 Z7 i5 j! W0 v: [2 V
else
3 `; L7 @5 R) J/ d
UARTPuts("uPP transfers complete!\n",-2);
7 A+ R0 m! O1 Y2 D
3 }$ \1 V* p. W
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- c9 N# S; W n
UARTGets(ch,2);
( `3 s7 v* V9 y
UARTPuts("\n", -2);
2 ~; }: P, h7 m" d5 [7 Z
. Q l k& _( E& I# r2 k. x
if(ch[0] == 'y')
$ _# d8 Q2 f7 Y
{
4 K0 B; C; \" a: H- b0 ?! T" p
/*打印全部读到的数据*/
1 T2 N5 |$ P& O9 u' i! k0 Q
for(i=0; i<upp_frame_size; )
! d: E. Q% |9 h2 H# V' b
{
* Q9 Q# D. X+ S7 G- {
for(j=0; j<5; j++)
+ H6 E" T+ o9 ^
{
* w2 u5 g4 M! _" l+ H$ ~0 C
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 F) Q# B# Y) n D2 S& E, Q* X9 e. M: L4 T
i++;
% R+ D* U7 E+ @! {- ]9 L
//if(i >= 4096)
2 ^- _3 O' O& ^
// break;
+ E2 c1 Q) A0 N
$ S' q/ o, l- @) V* B5 d0 S
}
# a+ m% R" t0 O; T2 p
UARTPuts("\n",-2);
; ?2 c* x' h$ L( B3 c; P$ \3 j
}
, s p7 A" W% n
}
" i9 |6 o; Q5 Q
' C( x% q8 H6 d1 G* p( [% _+ H* G
}
+ l- F2 V9 |5 w9 Z' Q
, L8 L9 z- E }3 X- F! R: \
. s0 g$ c$ z! ^" I3 a
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ k5 n2 Z; N p: x# Y/ f
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ B' s5 u! _* W! J
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4