嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; j4 s5 S; x9 B
Void UPP_TASK(Void)
& e. T; b; ~0 V2 e' c7 n- a
{
+ \+ T7 V' `! v0 e0 f, G
- [. a8 G% f1 }% X. A- R( x% \
int i,j,k,target_int_count=2;
$ g; ?5 k. G+ s! M
char ch[2];
5 b9 m7 a! A( X& F+ ~. t
' i+ W1 [& \/ E9 z
# [) n' f- x8 C* H
# @/ d* g: c+ W/ O
upp_interrupt_count = 0;
; o5 O" d, { H. P' L* W1 z- x
upp_error_count = 0;
' Q- F0 C, @, w1 q4 H8 R
! O1 a/ H) `( T4 F9 p7 g" u
UARTPuts("\tResetting uPP buffers...\r\n",-2);
) ? e( m* |6 E( U( P
// Initialize data buffers
6 ?5 [% {' w# y N6 C# X5 V
for (i = 0; i < upp_frame_size; i++)
0 f3 e+ @( T& R. n x# k/ `
{
8 N3 S3 [# n! l0 j& i
upp_buffer_b
=i;
+ T' d% u9 t7 S0 @
upp_buffer_a
= 0xDEAD;
! i% Q0 I5 H# [8 Z4 q
}
/ C. h0 |% g1 y
3 m$ N& N7 m5 \
//for(i=0;i<1024;i++)
# t" Y5 G7 p/ Q% G$ e2 h
// temp
=0;
- k. E- W# e) Q! z
; ?9 ~: W( \3 d0 u% p( m
//UPPReset();
+ l6 F3 ]7 \- N4 i
/*启动UPP DMA传输*/
' D. a5 a7 ?6 h3 P w0 E
UARTPuts("upp_prog_dma_i\n",-2);
8 L* v) C' P: r8 x& m
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- T# h/ M, ?) R0 C; s. M% g
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! v) j7 ?2 b* T& Q2 C
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( z6 e. \- q& j& s6 F6 x- |
2 N: [4 V) T7 w3 G
UARTPuts("upp_prog_dma_i\n",-2);
! _$ [+ P2 }4 [
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' t1 @1 H% ~' T6 {4 q% V9 N4 f) P- j
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 |5 k0 `% c0 `0 q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 a) i+ ^- o, l: U( g/ I9 g
5 W0 h. I) A6 h* f& x* v
/*等待UPP传输完毕*/
- O* U+ }4 h& T+ Q' V1 ?. [) n
//i=0;
. n" X5 B& d/ }, h! _2 q
//j=0;
4 i# V& k7 ?/ C( U; T, Q
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
4 U! w0 C' |: ]8 |8 v, z% o( W
{
2 y+ d- f; l9 f) |
/* 测试UPP传输的同时操作普通DDR数据
b4 K8 Z" p1 Y8 Z; I% |
temp
=i;
! @( l: t2 D5 ~
i++;
( V% h+ F+ [8 z) h( A. Z
if(i==1024)
% V6 k( n) q' M
{
2 v5 G+ R6 g: u a
i=0;
8 r! h1 R% K( a4 R! x/ V
j++;
3 f, ?% Y/ l! r) a; b
}
) F; v! |; U* ~- U# l3 X& g9 ^& s
*/
" j% k5 B# v9 X# T8 w; S0 @
/ C+ ~7 i7 v2 [
asm(" nop");
! x* T! i3 j1 L+ @. @
. z- o& u5 v% Z6 s4 ]8 x
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 M! M) [/ \4 j$ n( l! P
}
% Y9 w- I1 s+ J. }# K: C
7 |2 P9 I R' L) a. t
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 J7 R/ p7 P6 D0 y, P) v5 p7 H5 q
//UARTprintf( "i=%d\n",i);
) `" y8 O. k0 Q2 A
//UARTprintf( "j=%d\n",j);
& j9 C! o4 W5 H, C% w
UARTPuts("Data mismatch in buffers.\n",-2);
5 y0 q& `9 G8 p8 l
if (upp_interrupt_count == 2 && upp_error_count == 0)
$ v$ H' h3 H0 ^( G# _
{
2 n0 R% b% i9 m& _; a
for (i = 0; i<upp_frame_size; i++)
( H9 t7 A, J6 H* l6 v
{
( }0 R4 y9 m/ k" s9 q' z
if (upp_buffer_a
!= upp_buffer_b
)
2 } @. h3 [7 [3 [3 e
{
9 s+ q9 l. V6 n* O
upp_error_count++;
& W: W Y0 X1 ^
}
. o5 D1 \% y; V z
}
- N+ m/ F( T! Q8 b/ l2 f: u9 i
}
, r) \& ?# p1 y( [4 T7 r
) y( Y9 @% R8 C$ E7 h9 e5 u4 J3 ?
/* 报告通信结果*/
% B2 I2 k$ G8 \5 v, W3 I
if(upp_error_count != 0)
& r7 k- W; W5 H+ E) C3 g
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. B( @9 l" o9 E3 B
else
+ v3 M7 P9 \" p1 b( C
UARTPuts("uPP transfers complete!\n",-2);
9 F* j4 s! E1 W6 G
( K8 R. K1 |8 j X; q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ T5 }# K& Z- R7 H( g8 {2 W
UARTGets(ch,2);
5 S3 F+ @4 b8 V+ p. m' ]. s
UARTPuts("\n", -2);
- d& d* w; f" F( }1 S& e, z
! U) q3 R' T+ K7 B8 s3 Q5 n0 q
if(ch[0] == 'y')
& k; V5 O I2 x# s# Z6 Q- y
{
6 [$ ?. |8 B/ i8 d7 f5 G8 G
/*打印全部读到的数据*/
: U& ~7 g$ }+ N% \
for(i=0; i<upp_frame_size; )
4 C; T3 w, b# M# r4 Q: Y. g! s
{
; ^/ x8 D) A: ?% n& J; C+ N" q, _4 q1 C
for(j=0; j<5; j++)
, r+ ]) T* b2 S. ?/ W, }3 j4 C8 y6 u
{
1 h0 ]$ m4 H. A
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 ]0 Z* @+ Q8 U
i++;
x& d. Z# J" Q
//if(i >= 4096)
7 T" C- I8 ^7 B) {- q8 k, E* K8 T' _
// break;
+ e* @/ K3 _8 H, c9 L
1 L- G3 A0 q! B/ I- Z6 t8 I
}
3 M4 Q, @& C' M* [( k
UARTPuts("\n",-2);
/ i' Q5 m! |3 t* C! l z
}
9 m5 k; Q' h' e! B* G
}
# z- ?# F* ?9 V0 j3 k* N; q
8 A3 ?% j# i7 K3 h2 m
}
( g$ Q, D1 z( @$ e" f
7 m7 @4 a0 f, H" q4 S
* R- x. ~& C* ^3 |% N/ C; W$ E/ ~. u, B A3 s
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 h6 J/ J- G2 f5 p
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! b7 e( i' J& F, Q" Q M
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4