嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" f( K o3 l; V7 P3 w# c6 K1 ~0 n
Void UPP_TASK(Void)
" @6 d" }9 `5 v
{
L& j: T, R( V% p% l
, g4 x' U" c' ?1 G) A
int i,j,k,target_int_count=2;
5 m3 T1 p7 N7 _4 g* C$ c
char ch[2];
# Z" b, q& [ \9 I
2 ?; I: E: I7 J& u2 d
4 A3 g8 F' n/ P( H3 ~( c6 q
1 W, d. X0 s }1 c& d$ {
upp_interrupt_count = 0;
6 C& k( b+ p) h( m
upp_error_count = 0;
5 |# e3 {, o+ ^+ H
/ r; I* p M" \
UARTPuts("\tResetting uPP buffers...\r\n",-2);
q0 _6 ~% Z4 ~3 [
// Initialize data buffers
* t9 v" r3 y: S5 o. X
for (i = 0; i < upp_frame_size; i++)
2 y1 X8 w2 p- K3 ?& @" C
{
5 S# O% |: W' `# ^
upp_buffer_b
=i;
- I2 J' V. D8 N* [; h' @
upp_buffer_a
= 0xDEAD;
5 o# P8 {6 Z" g- p
}
: S* V% q- v+ U, |' \4 H
4 J7 D5 g4 @, a; k: H. U
//for(i=0;i<1024;i++)
0 e! B6 E" L1 h
// temp
=0;
% c; R) t- R, i/ [8 ?% F+ w
# g2 D) C" i+ O. f
//UPPReset();
- a9 `: g- F) v% m" ?$ s
/*启动UPP DMA传输*/
; E9 u9 o6 r7 Y2 z
UARTPuts("upp_prog_dma_i\n",-2);
5 i/ }1 W6 L0 G3 d
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% Y% a* b; I9 n
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 A/ f, e0 N7 p* p2 a: o, r
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 @: w" f. f9 h7 j
1 l; @; D* L* Y( V. P
UARTPuts("upp_prog_dma_i\n",-2);
/ F9 J3 J$ N( ?8 j5 k t$ e
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 f1 h4 i4 {8 E
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% m( q4 b, y4 g7 Y% d
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- n H4 }/ m u1 M# m+ k
# o+ n/ ]1 R# P- L( C6 y ]
/*等待UPP传输完毕*/
( `. J5 h. g4 a6 F$ \! g
//i=0;
3 J" [1 N1 ?7 A+ k. i+ l9 ?
//j=0;
" z. H- o6 v* L3 J% K. w# [
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ }7 N% j n3 X6 x
{
9 ]. o$ L1 V1 m" x/ _
/* 测试UPP传输的同时操作普通DDR数据
" p. \0 Y2 y$ B( ] A
temp
=i;
1 u5 s) R! @, v# E( i9 `6 k
i++;
( L3 \& M0 j/ k$ r" H2 [
if(i==1024)
( T- i' Z8 S# z7 g
{
- b1 b, G. N: t' U- k
i=0;
! J2 a0 v- J0 B- j' W i
j++;
7 e% N* e5 d1 a: b
}
2 N# m% k3 S7 d1 a8 {
*/
6 |# Y' r$ T7 _
! Q7 U6 N( S+ |6 `: o7 A
asm(" nop");
- ]# `- f) f; j, K
7 o" O! `+ B$ B! Y: c( [
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ l3 X, x3 Y0 h' A5 H7 D
}
: ~5 U: I T* @& E) U$ W
& G( X+ `, o3 b, J# x5 p: W. ^
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; \% l$ J) a* r; B4 X) Y. j
//UARTprintf( "i=%d\n",i);
" m0 |; P* ?& p+ i! ^
//UARTprintf( "j=%d\n",j);
K. S7 i) N/ Y; v! Y6 _4 J
UARTPuts("Data mismatch in buffers.\n",-2);
3 A9 ]7 M! Z! R
if (upp_interrupt_count == 2 && upp_error_count == 0)
$ v' @- G/ r# K
{
( D( P; m/ D( T- o$ G1 i/ `
for (i = 0; i<upp_frame_size; i++)
* z( d2 X3 J2 z! H5 t. ?
{
/ m* J' }$ Y a' m3 A4 ^
if (upp_buffer_a
!= upp_buffer_b
)
3 Y! y" S+ y5 ]/ A& j1 P
{
& k, @% a$ ?+ B7 A5 a6 }/ I. n8 o3 K
upp_error_count++;
: O$ q" b+ X; k- ]+ ~9 D
}
& r; i, c: V) v
}
( K. G- G e: Z: t
}
4 }# u- R1 S# B
, V+ D: i, S2 z& l
/* 报告通信结果*/
4 M- X; Q% ?( _2 x3 A9 m6 I
if(upp_error_count != 0)
2 B3 g9 W7 t' ]' X
UARTprintf( "upp_error_count=%d\n",upp_error_count);
X* |- f7 H" ^. v, @3 D
else
( j" A% T3 ]$ G$ D: Z; Y- w
UARTPuts("uPP transfers complete!\n",-2);
1 ?* N! s" \ p1 e. N5 Y. Z( h' M
% L' A& _4 k6 i1 Q. A
UARTPuts("Do you want to print all the data?(y/n) ",-2);
# ~# X2 w- X$ J) J4 t
UARTGets(ch,2);
8 S3 E: j K J" V* Q d( l- _
UARTPuts("\n", -2);
3 E/ T! B7 r3 b3 R) t6 J3 Z
& _. U% `8 ?& p
if(ch[0] == 'y')
% ~" | e; s9 _0 X' W$ d3 W
{
+ N& Z: K+ }$ b( j2 C6 }5 m
/*打印全部读到的数据*/
0 ?: I, O! `2 r( b: {2 `. H! b
for(i=0; i<upp_frame_size; )
" a: w3 M v- }, g
{
" t6 s& s5 I f) k0 d' E. |
for(j=0; j<5; j++)
& X( w0 a! s. T0 o; M+ X
{
" J4 Y0 H; R* _, e2 @
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ l' Y% B. b* B7 X1 _/ @- E/ E7 `! W
i++;
4 P6 _! F/ G* U. j" [
//if(i >= 4096)
2 S! m) k& N( D$ `
// break;
. l4 X1 @! J6 g" M) {8 Z# x2 s- k
0 C; `2 ^8 T' X1 J. J# x A) [- r
}
% ~% d% D2 [$ {0 P& r, Q+ |
UARTPuts("\n",-2);
$ N. j/ R1 k# i; x: W6 Z
}
7 \9 _5 s+ u" ?5 D0 A7 f/ Z
}
( p# _1 C3 a; c
6 F2 I. P. i$ v# p. E& \) S
}
/ u0 U: a1 G2 R$ e2 Q: }
. W+ b9 h/ D, Z- {6 f- Q. k2 b
3 N: G: d! r. ]( { s: ^% X3 o
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& L z$ d$ d' Q, D& d( U
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ v0 `7 W5 Z$ v" J
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4