嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- b$ L- ~8 ?1 ^4 l; s
Void UPP_TASK(Void)
n6 G7 o# A4 t' }
{
7 t$ X7 c- `: t& K$ `: ]5 u1 ~. b
' C# m5 G, Y1 B! l( Y
int i,j,k,target_int_count=2;
' C( M/ p6 z) o" G6 _
char ch[2];
2 z) f# e8 w, i6 f u! _" m
4 U- q% ?! |" g9 N6 b$ @" v" ^
9 ]$ I: d0 C0 r( u/ G
7 g' }- H5 A: ~6 L) j Q, Q
upp_interrupt_count = 0;
& p' n; J* H% R: k. j( f! b4 O
upp_error_count = 0;
& X: ~1 W$ z9 e+ [; l: N
! k! ~+ t2 ?1 J( I& n+ s5 Z) ]
UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 T5 S2 Q& e" j) X& Y/ L5 ~$ t8 d8 W
// Initialize data buffers
+ l8 E5 L8 o( t. K
for (i = 0; i < upp_frame_size; i++)
! A& `! p( }) ]* k
{
5 Z2 K _4 V. g+ Y, s$ y' r( C
upp_buffer_b
=i;
% E" A8 T5 f$ C2 a+ P4 T3 |, |
upp_buffer_a
= 0xDEAD;
. ^0 Q7 A+ _ l# p
}
1 w% k5 _7 B8 E! x) w5 `
, `6 A+ W/ G* t @" G5 i
//for(i=0;i<1024;i++)
# p3 B. k; l" {- |" K" Y1 r
// temp
=0;
: M' S) B' S3 O% f$ U: Z: v, L
0 `. Z/ j2 z& Q8 m6 R6 [
//UPPReset();
: u+ x8 ^4 x. p7 V! D; P
/*启动UPP DMA传输*/
3 o+ `7 P8 j* N. ^7 |7 [; _5 X3 f
UARTPuts("upp_prog_dma_i\n",-2);
* j z$ ]; y' M! ~( A6 M' a4 k
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 b& W/ p& e8 Q1 e, k* s1 V
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 n- G" W' _ a# k# I& E# q9 s
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 N: o2 w) x- F+ c+ f
1 Z2 k; D2 B9 f z- }. B c) b
UARTPuts("upp_prog_dma_i\n",-2);
8 i3 x/ z+ U7 \
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! n/ s. i1 F0 A+ U/ v
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% b v9 m0 w2 Y! |, N
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# x" _ O+ M/ ^- c
. F) \. p& ~* W4 T
/*等待UPP传输完毕*/
$ l; }4 ^+ E' E) I3 F) I
//i=0;
$ c; N) u8 N( Y' x8 x. i% B `
//j=0;
6 t9 D6 q3 [7 g# x! |% }
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ g1 x+ c: N/ O6 f7 W0 Q
{
/ q; v& ^- F8 [2 g: I
/* 测试UPP传输的同时操作普通DDR数据
$ w; ~. \$ N& w3 v- d
temp
=i;
) U# M5 j4 P' o* ^" u4 W3 Q4 E( }/ d
i++;
# j/ a9 L7 `- |0 e9 h+ Q! S/ {
if(i==1024)
; J, Y5 y8 z! y& v& y; T' z7 |
{
8 a4 W e% Q9 P2 p9 E6 Z
i=0;
9 [5 {( G+ T. T" a/ }
j++;
8 Z; U! X! F# D: |( U
}
: Y3 H: D9 `4 t/ Z, [" l
*/
& q* k8 D( v+ r" k7 u3 a+ ~( m
7 M2 z) Y" \% ?" f
asm(" nop");
+ M" e- F: G6 y8 V9 r% P/ L; q
2 _, W. e* {5 F
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
4 U- v5 p: j$ T) i; u
}
; [7 K' I+ S* p* D
; x8 l7 s/ @1 D: `
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 D7 m6 ~) Z- v2 J) x/ U
//UARTprintf( "i=%d\n",i);
3 Q; Y& A) m& R
//UARTprintf( "j=%d\n",j);
9 c1 z1 c) d% k
UARTPuts("Data mismatch in buffers.\n",-2);
2 R) n1 p* M" U5 @7 c% }7 D# ^
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 B) \% A6 |0 u g' i& j! s3 S u
{
9 X" G7 U9 L! S7 Z4 s- w9 ~) D
for (i = 0; i<upp_frame_size; i++)
5 U+ S. G2 B, @% W+ {7 W
{
, M$ W, h! _7 C4 @! R* {( a8 U
if (upp_buffer_a
!= upp_buffer_b
)
9 E( ?3 m0 z8 L! ?# l# r/ L8 o
{
, n7 J' t/ R" y/ N2 v- g- E+ k" j
upp_error_count++;
! h* O D& b$ ?# f
}
# p$ ?' S8 q( s0 M0 f* A
}
. c; Z; c( i4 ?5 s. n) ?
}
0 J9 ^- f+ q! j/ x5 x, `
3 |1 b, z# S% k5 j! Q
/* 报告通信结果*/
* r$ L8 j4 F9 \( P R$ X7 {6 q( Z
if(upp_error_count != 0)
o3 n7 A$ g; h* C: ~2 X. R
UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ z, p4 }* `' ^; f( ]" h
else
1 I3 W3 ^. Q; c$ g; {
UARTPuts("uPP transfers complete!\n",-2);
& g7 p% X' M! _- \. O! [6 L
4 A1 P& X; S$ ~4 h$ i
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 W4 j: ]! S% ~. v( G
UARTGets(ch,2);
- x1 |! k, e9 v" A3 X1 V
UARTPuts("\n", -2);
9 h4 U; n" p5 l# |" x
( V/ U4 Y& @! C7 R+ j* H; Z: S; T$ k
if(ch[0] == 'y')
4 x& i2 @- ^1 M
{
' ?' S0 d0 V# i$ r
/*打印全部读到的数据*/
. ^% I4 `3 i6 S
for(i=0; i<upp_frame_size; )
. U# v2 y9 ^- l8 m4 J
{
* A# E+ A' v( H5 r' l- x* E' E
for(j=0; j<5; j++)
" W$ V$ E6 N9 U7 L3 `! S8 i( l
{
1 P# O! V' G! n2 `/ H, m
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 S$ P# j; a- H, g
i++;
: y& v+ m* B) b4 U! o5 @
//if(i >= 4096)
0 ?. r1 P6 U: f3 S3 P/ V
// break;
2 T+ Q. `( B; z' s/ q( G
; r+ L: O6 S! t: G
}
h6 Z% W/ T6 N
UARTPuts("\n",-2);
5 b# Z/ Q( `% } s+ M
}
% a1 u: f6 k9 M, N' ?
}
3 F2 t; q3 e& Y
9 C& b. T+ c( O9 j+ E/ E
}
# D/ ~! Z+ w. H4 K' c8 x$ H. ?! ]
# e( d9 t ^% W" x0 }( S
8 Z" b( m6 E7 _+ A/ q6 G
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ B8 y2 E& a6 a ?' d4 `
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! ^ y) @' S1 I* q3 G: w
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4