嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) h1 P& ^. i# a& Z3 \
Void UPP_TASK(Void)
1 X+ V2 a0 [! h( j* S
{
! ?3 p& F8 \' r& y, q
% {: c; J c6 e/ R) l( U
int i,j,k,target_int_count=2;
# m, [% P! k [
char ch[2];
! Z; l6 @. h% o% y u, ]
0 w5 D, K4 j* {
6 f% q: _" ~- z, Z$ r% R( t; F% O9 n
8 e4 C+ v2 }# O$ O4 K* z5 K
upp_interrupt_count = 0;
: Y. O4 x; w# s2 Q
upp_error_count = 0;
7 C1 Y' e7 A; |: f: I( H
* @$ s: q3 |4 m5 P0 y# M3 w# e' _
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' b+ w' M( Z2 B p, r
// Initialize data buffers
1 g2 q/ R% t) o. e, `
for (i = 0; i < upp_frame_size; i++)
3 y) U+ r7 r; f2 d$ l r: {
{
7 C9 F6 L: z# |$ a
upp_buffer_b
=i;
+ n3 _; e; {9 n6 E. I2 ?# p
upp_buffer_a
= 0xDEAD;
! o# U( d. w U2 r- @
}
( b5 S" P7 c4 T) I
: o7 ], t- d7 u7 G5 j |
//for(i=0;i<1024;i++)
5 D1 g- V) n6 ]; _
// temp
=0;
8 w6 [1 x6 U" v
. I( Y* a$ n B; Y, Q: K3 R
//UPPReset();
8 T* y. _5 D7 k' ~, Q3 L m
/*启动UPP DMA传输*/
, n! w0 b, [: }" g3 J3 `
UARTPuts("upp_prog_dma_i\n",-2);
5 L" y! o* S- S1 g' ~
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! s; `( P& l J$ o0 t1 J5 c0 R" B
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 U% @& A) e3 B% o
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 C) D8 x1 R. Q/ @9 M9 z
2 ]: ^$ ]$ [; }6 j/ V* G
UARTPuts("upp_prog_dma_i\n",-2);
: I7 J9 c( I+ T. }! l# j
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: H% c1 L1 ?5 c
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& [5 I' F7 W, u! O2 o
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 v8 N+ U) W I
5 r) x& B5 Z( A! A/ z5 z' n7 k1 l6 z
/*等待UPP传输完毕*/
* }3 ^3 |9 l; f1 x& c3 P1 a9 v% n
//i=0;
( i2 P" u+ H$ k8 W7 Q
//j=0;
% u5 C* V) w: ]& c
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* G, N* }/ Y1 z2 a' E$ W; H
{
; s5 r L% ~! X+ h7 F
/* 测试UPP传输的同时操作普通DDR数据
6 o7 \* f b3 } r' k% ~7 _' B
temp
=i;
) `( b, U4 V3 u
i++;
& H, Y: l! E" Z) o* M X
if(i==1024)
- {7 y1 p8 x5 Q6 D! @ H
{
* e; |. P1 l" t% W5 K
i=0;
P0 }% S/ D9 g& w% f" W. c
j++;
% c+ q [, P8 D$ r+ N1 B
}
6 T9 d: K- o: ]) S* X; F% y
*/
~9 v1 p3 }! L. C+ c2 L/ a
3 c( L, |9 ]. u
asm(" nop");
: i; {1 K/ k' |) P
: T8 x) G W b/ H
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; e( u& p+ B4 {6 Q
}
1 u% q/ w7 S4 q0 u* k& C
- j4 n' W6 W. Q# _
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 v& g& f0 q5 k
//UARTprintf( "i=%d\n",i);
& H" h" ?- b( w; k9 @8 q
//UARTprintf( "j=%d\n",j);
2 M/ f' f! t4 B3 l( B' O
UARTPuts("Data mismatch in buffers.\n",-2);
$ A: d1 ?6 C. T8 p) w0 F% u/ b6 f
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 S3 i( F& C5 i* y' Y
{
& l. @& E7 Y9 S
for (i = 0; i<upp_frame_size; i++)
% [8 m% p @( q' w4 e
{
7 Y: ^' S: Q+ R- E- D
if (upp_buffer_a
!= upp_buffer_b
)
1 `/ }7 _0 a& b0 c* h, x
{
) ]) L) H, i0 y( z q! b
upp_error_count++;
. V- k* @* W* k _$ p
}
5 w$ \0 z# i U, G
}
5 }1 y& y$ v+ Q$ W, O( T
}
( _8 ?) l- }, R+ ]
- ]. p3 r( T/ }5 ~2 @6 `/ b9 J8 r
/* 报告通信结果*/
: I) {: g9 L, v3 k& E5 F8 S, N. ~
if(upp_error_count != 0)
- ^ s) v) |. T5 I
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% c2 K1 e+ Z/ F: O9 e
else
& |$ \" E5 |. {" G5 Q
UARTPuts("uPP transfers complete!\n",-2);
' B+ a7 `. d. ?' {
, r( \. k. J( Y) r8 r' q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' f+ b- a4 t1 S/ X5 ^+ P
UARTGets(ch,2);
! K4 ^; j3 Y: Y. i; u
UARTPuts("\n", -2);
2 u6 j3 v5 b2 I4 I$ N
g* j2 U4 K" H( M. M
if(ch[0] == 'y')
6 F& r% d0 E4 B& o+ d
{
& N, K8 f. N; B3 Z2 f, V
/*打印全部读到的数据*/
% h" Z" ]1 ~9 @0 s7 y5 w
for(i=0; i<upp_frame_size; )
7 h) k9 S z( \0 H' @
{
+ b& }1 } x+ @% w; f5 U
for(j=0; j<5; j++)
- K) _& Z) |" F) L6 Y" C
{
4 n# E, r4 Z5 ^6 Y4 m8 d
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 n3 ?# D$ e5 }0 |8 Y( Q
i++;
, i7 l- r5 _( h# r
//if(i >= 4096)
& Y1 ?% i B' _- J+ a
// break;
$ d: u; u( H( x5 I! p# ~
2 | \2 [8 t* Z5 o( S+ M% N
}
- B- C, h2 p7 `* M3 N4 c
UARTPuts("\n",-2);
" p% X# f( D% n
}
# {7 c4 N8 i$ ]2 M
}
0 G/ ~: k. P: p
( Y: B- [9 l; x' n5 V! U
}
: _: v" U9 F& [7 B# v
/ ?/ U. ~& S) u; G
& o, A0 |( S/ M! t
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* r! A, ` h# ]( H8 s6 k, n
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 W' g7 Y% [# \3 I
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4