嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) J; Z- Y4 t% C3 F$ F
Void UPP_TASK(Void)
! x9 Y4 |' E/ y1 }3 ?5 s3 P
{
7 ?. \! w- w$ Y y. \3 I* D
& }7 }: c; v2 T' c$ U9 x! q$ W
int i,j,k,target_int_count=2;
D9 ~& E5 O& u$ i2 k
char ch[2];
* E0 h) o& @8 q# Q" N3 r8 z9 |8 T
3 y. H; K! c6 X8 [' w" F4 \0 s
; K' S$ E4 w5 P9 K: g6 _
; q' z& E4 W! { E$ ^+ _3 d& M. G
upp_interrupt_count = 0;
7 t( f/ w) u: `4 ]- C0 y' a" a
upp_error_count = 0;
, W* }- J5 r; ?
7 Q5 k4 p' w6 u8 c5 E- f9 W
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ U) y( S( h! W8 ]
// Initialize data buffers
# a- [1 t( u8 h; h7 L. G
for (i = 0; i < upp_frame_size; i++)
+ @1 x, M& i% V6 B4 f8 j
{
4 ?) `6 {! C4 D; Z+ { ?
upp_buffer_b
=i;
. G7 V1 x+ H" k- h4 O3 d0 x
upp_buffer_a
= 0xDEAD;
. @4 k. I) G) z5 d* c: b: B0 @
}
, Y4 w* O. `9 r
: p9 h5 o1 v1 ^ z% W y6 y+ ~
//for(i=0;i<1024;i++)
& F) Q; h1 _6 {3 c7 X/ M
// temp
=0;
9 c* d$ N& Z4 Z9 o- ~
7 J( ?/ z' a4 b. Y' R9 y4 s
//UPPReset();
3 ?& h) ?& I+ U- ] V. l
/*启动UPP DMA传输*/
5 x7 K' U% T9 O( _$ r3 J
UARTPuts("upp_prog_dma_i\n",-2);
" T7 ~$ L* ~- W9 ^
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 N/ M1 A# g" ^% L! ~
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 C/ N- t% f4 j% q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ k" u8 G( g$ ]8 R
* ]7 Y6 n" R, o5 m+ E
UARTPuts("upp_prog_dma_i\n",-2);
# Y/ V6 {8 H% @4 Y& I
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* I- X0 I* G' B1 }( k
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 _4 v5 k9 p1 u* S- t2 J
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% V0 f h5 S# p2 `( \
) v6 z( d: O) n- g
/*等待UPP传输完毕*/
* x& [1 w( x1 }% X! D
//i=0;
2 J% i* H* J! j2 o
//j=0;
, x5 S j9 ]% w+ J
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 [( B, m! d9 A3 M
{
# G5 r5 F1 K& S% W% T
/* 测试UPP传输的同时操作普通DDR数据
2 z3 E* Z- z0 e$ r
temp
=i;
" Q- F0 e$ }6 S
i++;
: N; }( S, d8 Q: k: ~7 V9 _7 A+ x
if(i==1024)
r& D6 @: k: M: f h8 l m
{
4 P% r1 `- |0 L3 v) e% \
i=0;
5 C7 G: T* J# B* u9 s- g9 ^7 z
j++;
. e6 A6 u: Y5 Y" y3 l
}
6 e7 u8 W8 Q( L5 [9 x& l
*/
# b# N$ g+ |; |0 f- E; d
3 H2 s1 P; v0 w
asm(" nop");
- E `# [$ K1 t$ I: j
' K1 S0 j4 E C, {% V3 E8 M. v
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ v: y3 ~4 D2 M9 s( h7 I
}
! m3 D1 M9 T+ F7 C2 u. v0 B
1 D& c r5 j# f! b0 u
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ t* a/ p6 f% ?- r) @
//UARTprintf( "i=%d\n",i);
# n @7 W6 W' ]5 J
//UARTprintf( "j=%d\n",j);
' j {% L5 m5 a7 g
UARTPuts("Data mismatch in buffers.\n",-2);
* M2 j1 K: z* t. H# f0 X
if (upp_interrupt_count == 2 && upp_error_count == 0)
q t7 m$ J- {$ m# d u' n/ J
{
3 l; d$ ^7 c6 z( y) Z2 |
for (i = 0; i<upp_frame_size; i++)
8 k @' E: |. X/ J+ u
{
6 d% n2 y" ~& t5 ?: y$ k
if (upp_buffer_a
!= upp_buffer_b
)
0 q8 T! D; k* t. Q; E6 }
{
3 i) R( m, L# R( z. ?5 @: M" s
upp_error_count++;
1 _( N _% t; ~& V% R$ Q5 _6 V
}
4 H4 n. W& G7 ?7 i5 O
}
* Q# F$ j! [/ Q E* |- z
}
, M% K$ T7 X& k. S, _4 t
9 ?2 U% c$ Q; Z# u9 z% Q0 t- R
/* 报告通信结果*/
- E0 J! j1 u" H
if(upp_error_count != 0)
9 Y0 t: ^2 y4 d ?8 i% D9 E0 n
UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ z' k2 O' i, B% R: y$ e
else
; R2 \: e/ o6 k0 ^3 J
UARTPuts("uPP transfers complete!\n",-2);
! N& Y$ a3 \+ a8 z9 l5 f
1 W% W! e) [: Y5 O: X
UARTPuts("Do you want to print all the data?(y/n) ",-2);
" ~& E* w% Q F4 j* A1 }
UARTGets(ch,2);
: i9 t* l5 j8 f0 j, D# O( {
UARTPuts("\n", -2);
5 P4 y, t2 a( K( t8 N4 i2 u
0 h5 t+ Z7 N+ |( C1 |# }
if(ch[0] == 'y')
8 t! {1 y7 d% b( ^7 g$ n) x
{
- p7 [. X6 `9 _- f
/*打印全部读到的数据*/
; @7 B# ^/ f' V, x% I U$ Z
for(i=0; i<upp_frame_size; )
) C' V; `5 C3 D9 q& i7 J
{
7 @4 V. x, A7 f, d
for(j=0; j<5; j++)
* `8 T. ~$ e/ \; Y* p: p' d
{
- Y: J X% G0 j L7 ]$ {' I+ u
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- Y4 @* e/ e( C% p1 g& \
i++;
" {3 L, B2 F# ^
//if(i >= 4096)
- G, K& S; L# i) O4 n
// break;
- f# N, q; W3 K; K" m, H
5 j1 R1 |6 b* ]4 a* ~1 I4 H+ H& P# }
}
8 z8 F {( }% }1 N& \6 s+ C) s
UARTPuts("\n",-2);
0 t/ z( o7 _: H0 W
}
! Y/ O$ U4 m% N3 c, P$ [
}
* Y4 r a h& ?, u
( p# g# _ o4 H
}
; a4 f. L) w0 }; z* `2 x Y
0 t( x- ]) N) d" d ~
7 R ~/ [, Z4 i
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* J$ g3 q9 g/ H# ]* T& a
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
7 k' ?" P. q7 h1 y
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4