嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: `( C9 E$ V8 \' Z, U1 J
Void UPP_TASK(Void)
' N* O6 m( I! g" ?
{
5 n# k' D Y. F' S' q9 V/ T: X
h4 a$ m' d8 X* H. w
int i,j,k,target_int_count=2;
% c% f4 Y; t2 t4 ^' v: V
char ch[2];
- V: e1 @" m( W4 |
- \1 o/ ~9 c7 Y8 }& ^
! o; G( q' I8 l9 @( D' Z4 {
+ ]3 `- F+ l2 n# }
upp_interrupt_count = 0;
( X6 q* _- D3 t$ g! k
upp_error_count = 0;
% p' N2 }, R0 E* N: K; b4 Y
r* Q) q/ T# q! n7 ^3 e2 v
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* v5 ^" m# ~, }- J" D
// Initialize data buffers
+ k5 r6 e2 p/ X& Z' p! V
for (i = 0; i < upp_frame_size; i++)
/ X1 C0 q q+ a% o
{
; k/ }4 `' W: u
upp_buffer_b
=i;
6 R3 v, o5 k" \2 Y4 o9 A
upp_buffer_a
= 0xDEAD;
" j1 X' \. ~: ~% {+ a
}
6 _* G/ h7 |4 u |# w7 \( q
+ g% s7 E3 ]( L- U: H# z2 }3 @# q9 Z
//for(i=0;i<1024;i++)
6 e" K" h6 ~' A8 p( n
// temp
=0;
! w6 E) z+ a5 k7 u# V7 i. n
+ l/ K# b) b$ O" E( f
//UPPReset();
7 J+ g5 e0 I( R( o8 K$ u/ ?
/*启动UPP DMA传输*/
; \' f; P* _9 C+ c
UARTPuts("upp_prog_dma_i\n",-2);
% _4 \1 s( v3 M' H/ |0 u& `8 _
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ R q7 C8 O3 S: B f
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 { @3 N+ |1 }+ L: |$ c6 B
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ t* ~9 h1 k1 [* O! P
1 N! @9 e7 j& V
UARTPuts("upp_prog_dma_i\n",-2);
4 P C8 h) \, D9 C* [% Z4 b+ h
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
C/ b: @( b/ X; F$ V
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 ]4 \9 n7 e# d; Y8 `3 B- v
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) y) k1 A' J" s
: _( [7 ?; n( P
/*等待UPP传输完毕*/
! E: j- H- t' p6 r# e* Q
//i=0;
O. [* q: k( U
//j=0;
( G# Z. c0 J. [+ x4 W# _, k- d5 c
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 D) T& x/ Y X0 L& d& E' f* [ ^7 F+ P
{
" {% s* D( V8 }7 [
/* 测试UPP传输的同时操作普通DDR数据
0 Y( x9 |0 k1 ?8 F- H; Q
temp
=i;
" |" d7 R1 R" P2 ]4 Y, G X1 i
i++;
/ m/ i# u7 J) p
if(i==1024)
2 f0 e" Y, ~; b1 [' R5 V' a0 T9 f
{
~2 @% d4 Q$ l4 k, U
i=0;
8 }% _! I K, V& G& c. v4 s
j++;
8 _2 V$ g/ p2 z: M
}
, {8 {' N1 W% O
*/
4 O, f. p. o' q* M( |4 U
& r6 N3 X6 A4 \6 t, O1 b9 R2 O
asm(" nop");
. _ K5 S7 v7 I1 a6 c& `9 [
: ^& D! c& ?; ~1 R, T
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- G- z* [1 r0 w
}
/ y+ c7 D5 c" k6 q
. T- c7 s" r8 g& V% C
/*检查UPP传输的数据是否正确 (loopback modes only)*/
0 H5 u) I+ a* ?: b6 ]" V
//UARTprintf( "i=%d\n",i);
* N# k! i! p$ c
//UARTprintf( "j=%d\n",j);
3 j+ `0 R' n+ V& u8 l8 @7 X
UARTPuts("Data mismatch in buffers.\n",-2);
- g) s7 e" R% L% y- @/ D) P
if (upp_interrupt_count == 2 && upp_error_count == 0)
, _( g! t | O5 {
{
9 m. O1 {& Y: ^6 ~* k! Z9 c/ s) w
for (i = 0; i<upp_frame_size; i++)
' A6 K) U0 J& D( O$ {
{
, O- t. g* R3 f+ q8 b0 u5 `
if (upp_buffer_a
!= upp_buffer_b
)
; v; s) F- h7 ~) i- d- d/ o$ B) o
{
& o9 u& l; j! h' D0 p; p
upp_error_count++;
# R2 U. `( n+ w z
}
- x6 H5 |8 X; g X% j+ n! M
}
; ]2 l2 N# t3 z) D
}
* z- C/ i& c3 _0 _2 Q9 x
1 W8 u& Y7 p( G5 ~
/* 报告通信结果*/
8 z, _1 J9 ]1 O& Q, {% k3 _) w( K
if(upp_error_count != 0)
4 O3 _) Q7 L2 Z7 S. Q* X6 {+ n5 J
UARTprintf( "upp_error_count=%d\n",upp_error_count);
! A2 O& Q2 F2 k& J$ R- S" U' P8 ^
else
/ I" _: ^ \1 P" q
UARTPuts("uPP transfers complete!\n",-2);
( s3 l3 D0 Q0 T! m
% m! N: D2 S0 X F9 b
UARTPuts("Do you want to print all the data?(y/n) ",-2);
w; ]& o' M! f
UARTGets(ch,2);
$ g! S0 R6 D( M( p+ k4 d; J
UARTPuts("\n", -2);
; t! Z4 o8 \6 |
/ I8 e- c+ r; r8 J$ f
if(ch[0] == 'y')
: P; S2 H0 k$ O3 s' Y* b
{
( E6 ~& p a9 a+ M& {
/*打印全部读到的数据*/
7 v( @( q- u9 z' m1 \
for(i=0; i<upp_frame_size; )
2 M. K. h% B% z& \' g3 k, K2 H G1 K) ~
{
, t2 b+ u$ V# H- f0 D* m0 r
for(j=0; j<5; j++)
! F$ D \# T% p" @
{
/ ~) }; ]4 r# v& D
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
" e5 i6 x `8 R) j4 J
i++;
8 N; |: `3 u- j, W% f$ i" A, ]2 k
//if(i >= 4096)
2 e7 g0 M1 }* N
// break;
3 {1 y8 C3 r2 J3 B5 n
+ v7 k3 d" F$ e# Y
}
- |, H, n- j: \
UARTPuts("\n",-2);
) L+ U) q2 j1 Y
}
6 }# V5 n7 e, E! m m
}
; l" t" Q N) i d5 r. U
, N/ K+ H# k2 ?; X7 e: [
}
; h b! x7 T# l( |$ `( q
2 W1 ?, i6 w. z% m! a
+ J6 t' A. O" L3 z
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
. f1 {# F+ `1 ^+ e
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ V3 u4 D) K" R7 \ u
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4