嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; T3 S$ b) @3 F# f4 u* J9 h
Void UPP_TASK(Void)
% z0 q/ @/ b [9 k7 _8 X
{
+ L7 r3 U: b8 Z, W# U
' v- d3 M* l% u y* c6 ?2 e
int i,j,k,target_int_count=2;
% [/ A) ]4 |; W$ a
char ch[2];
6 Y9 `- J' e# d0 x$ K( I/ D! `
& b0 v# Q8 }9 b6 P1 Z
; J/ N, J- n) [9 ?/ Y+ z
9 Y5 w6 H) O1 b/ B+ _
upp_interrupt_count = 0;
. O* T: _4 }9 k" |& |: j6 l- N
upp_error_count = 0;
; W; z9 C4 T( g# d* e
, N* z' d$ H1 S" l. |* _9 y- {- W
UARTPuts("\tResetting uPP buffers...\r\n",-2);
) ]8 X6 Z) X. }3 |
// Initialize data buffers
0 b, d2 y& P6 I, X0 H
for (i = 0; i < upp_frame_size; i++)
0 H, S6 I6 {$ w4 `& @1 G2 W
{
: ]( N8 Z% L/ E+ L! p
upp_buffer_b
=i;
! d: h# j5 ~2 b* `& b2 f$ |
upp_buffer_a
= 0xDEAD;
& H8 K X# q0 R5 T1 s1 D ?
}
7 ?' q' N! M4 x1 [4 i5 K
, E1 k+ @$ J- I. u. j* i5 q% P
//for(i=0;i<1024;i++)
% {/ a. [' R' O3 K9 @9 U7 x' S- r
// temp
=0;
$ @- ^2 _4 u2 |/ E, {- [- M
+ ^. A9 ^- |( N2 d
//UPPReset();
+ C( S7 a1 ?0 u5 z6 c* f* I: m
/*启动UPP DMA传输*/
2 B4 |/ o' X2 V: h4 L1 t
UARTPuts("upp_prog_dma_i\n",-2);
0 v& e! F( C; m1 c
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& i- r. X) `% A- C# S# z/ W
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! I5 J( m# R# V$ m
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, P$ f3 @1 `9 Y3 r' ^+ u* @
' w8 U0 l1 \5 [' y: F
UARTPuts("upp_prog_dma_i\n",-2);
# Z$ O( ]: T2 z
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
& V Y" m5 N! k! d, q R
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) {$ V. q# h9 d0 n, K
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 M( a& Z. h$ q9 X: a0 X+ e
% C; z& U/ {, S
/*等待UPP传输完毕*/
9 s0 J$ G6 G# H9 m, w _ i. p
//i=0;
* m: J V& r" F
//j=0;
9 y4 i- `! y5 G! F( A
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* b, L7 d& \( a
{
" `) a' ~" I% v
/* 测试UPP传输的同时操作普通DDR数据
4 U. y$ j8 w6 ?) g
temp
=i;
7 @# d/ a+ R# c |0 N5 ^
i++;
6 `. I# k+ U5 c2 `. l8 e% i& G
if(i==1024)
9 v' g# d' g4 l+ j# P% t) [
{
7 ^, |, g& U8 f) ]1 r; d
i=0;
1 F* J- T* \7 k
j++;
( Y- F' e( M6 \' [. S- w1 v& x
}
: }# Y* o2 ?6 m$ y: K: _3 W" t9 B D
*/
0 R9 M- Y7 y5 Y3 s4 H6 ~
$ ^8 [5 {& S# P4 \: Z
asm(" nop");
$ }; n3 K8 [ {; D9 ~) a
" E; s9 f) c2 S1 C( ]+ `/ b
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ C, M' F4 x; Z3 T4 f% I$ V
}
$ j: S* Y' q2 E+ s0 o
8 t4 G0 d9 A: t3 b, C* K7 K
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. a7 i! l+ c9 x6 s' R' Q
//UARTprintf( "i=%d\n",i);
3 b' V v. m" C4 G
//UARTprintf( "j=%d\n",j);
% m( |+ x) Y" E: c1 G# V
UARTPuts("Data mismatch in buffers.\n",-2);
- p: ?+ Y, t; @, h p
if (upp_interrupt_count == 2 && upp_error_count == 0)
( u4 u! g) ?( @& ]
{
# H* _0 @6 ]) t7 U; T- j, E
for (i = 0; i<upp_frame_size; i++)
' C3 m+ T% t+ e) d' K) D* ~
{
2 A# m& b; V9 J3 m% v- y* y
if (upp_buffer_a
!= upp_buffer_b
)
% E9 Q) K: n, s
{
4 b, |; w V7 v& L% y7 W/ F% y' t. w
upp_error_count++;
8 j# j! _: s4 {% ]. i: `" C. R
}
6 F2 T" z: e. D
}
' R$ i& R7 V8 W/ M) ]0 B
}
! |3 G" v; j, ]
$ R! b! P4 b) D. d
/* 报告通信结果*/
* ^' ^2 S9 ^8 H
if(upp_error_count != 0)
u* d5 P9 b: \6 z% e* B) }
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( G+ X4 b- W9 J2 U
else
8 F# ]; s, a2 q8 f
UARTPuts("uPP transfers complete!\n",-2);
5 I2 v" ]; B1 t! g& H! y
. f) P- P/ ]) ]" v6 u
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& c: J7 s% D1 S1 Y) o
UARTGets(ch,2);
/ ~. O2 Q# [& F t/ {6 E# g
UARTPuts("\n", -2);
8 i; w: {- r! p' ~# N- C
" u4 y* |6 ? K6 q6 t: A3 ]
if(ch[0] == 'y')
3 V% D" j0 g4 J) Q
{
' T8 `# ^+ j2 z3 }' \
/*打印全部读到的数据*/
+ ~% v$ W8 k5 v9 x7 ?) A: P2 p
for(i=0; i<upp_frame_size; )
7 x+ a$ l* r7 W+ P, e$ Y/ S9 t
{
, Q C! c" D0 W% Q/ z
for(j=0; j<5; j++)
- p, W8 R1 f1 L1 F5 U
{
& [( L7 S; D1 `: A/ f
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
@ v( |0 S( E" N
i++;
1 P; n1 l5 t, n" b( W- E$ J. ^0 l
//if(i >= 4096)
. E4 [7 ^* W+ ^( J6 @$ G9 U, v6 t
// break;
% _4 u" h, @7 [2 E% Z5 V
+ \- g" W" d: j8 H4 `
}
, P" H9 h/ k0 ?
UARTPuts("\n",-2);
$ [& o M! J7 E5 R! }3 w5 C
}
; O- m1 x+ Z, l( `6 h: b) D
}
1 ^0 g! j7 l {# m# R- @' f
' h F6 R# d( l& G+ A& E/ h
}
' E2 K. V- f; W' u8 e+ _
4 N2 A+ Q& B, D* M
) n# j0 B9 g1 I# t" H) d% T" L1 e
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ R6 T1 U' S; m) P$ w
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 T+ x, V7 \+ m$ Q9 {5 ^* j& B2 R
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4