嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% m7 S5 a8 }. M3 k9 H* `, f$ W
Void UPP_TASK(Void)
! e( Q6 h. s3 {' g
{
l. {+ c+ r$ f/ t- `, Z
& f% ?, G0 W& [4 a9 k; o
int i,j,k,target_int_count=2;
$ \" k! Y9 E8 v2 Y: ?, a1 u
char ch[2];
. g# L9 c% c P- n W! ?" G
5 V$ t) L$ ^6 W7 B( e
; L! a+ k! m) M
; U, O6 Z% L( S5 {
upp_interrupt_count = 0;
9 y1 r: `& v7 ? y
upp_error_count = 0;
* S- D1 `1 n d- g6 O
" }: a8 z" R6 M `) C
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! X# w* J5 P5 M; b- h
// Initialize data buffers
( |3 _1 K% x. a& b" v* ` c" a) Q
for (i = 0; i < upp_frame_size; i++)
* Z) I6 M7 E- f
{
% g" T3 r1 m! ]6 F, ^2 Y3 F1 K
upp_buffer_b
=i;
1 J0 L3 M$ M8 [' b- X% |2 M: W ^1 L
upp_buffer_a
= 0xDEAD;
/ f( ~7 v7 l$ }: Q. C. V& I+ ]
}
! f9 y& e0 A P7 v
: n% A# u7 I$ N
//for(i=0;i<1024;i++)
( e# `% K! @- J9 X& c
// temp
=0;
* [, l1 `% M- `! D/ d
1 ? q r/ E8 ], C4 \, W: J) I5 s
//UPPReset();
: m% o8 J5 l. D$ Y, l3 \* N
/*启动UPP DMA传输*/
+ [9 d2 v% R: c- n
UARTPuts("upp_prog_dma_i\n",-2);
. T& W u- _+ W
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 E0 c7 a& q7 l8 Y$ {" z6 d, _
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 J" h5 v4 t' c3 A4 w5 z4 d) D
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) h! `8 p& `* H6 I8 E
+ `% N$ }- C0 m, Q, v: \
UARTPuts("upp_prog_dma_i\n",-2);
3 {! K+ N/ s, _8 r
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' p; ? \' i9 ]& q2 J( U7 \. I
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ c9 d& X z3 |+ z
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 t5 |6 N$ W/ t, ~" ~
# M# d. ^% @7 I3 L/ h
/*等待UPP传输完毕*/
; b5 J- U) h8 |5 q x7 j% A0 `7 C
//i=0;
S$ T+ d+ X0 N8 p
//j=0;
1 Y' D0 n# f) ~: V# |* }4 ~3 S
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' ~4 p) j. h9 j i8 l. ?6 p8 ]& A- f
{
& [ Z2 y5 e0 E: _1 ?/ k( p& v
/* 测试UPP传输的同时操作普通DDR数据
R0 |. ?; P8 l3 D3 `2 z
temp
=i;
. Q' Z% Z4 P# b2 p/ y- Z
i++;
& o' o2 D( _5 O4 w5 P a: \/ b
if(i==1024)
& d4 H& O8 O0 H8 \ O% t/ z0 o
{
4 {5 N8 m0 _4 l! x" X% s) a
i=0;
, ?/ K% E# k) w/ K. C
j++;
4 b ? u# q2 Q" k- d% {1 v# { O
}
1 {& I: x' d2 g9 T( J8 m# E0 N0 [
*/
( Y f9 Q1 F% i& e( P
2 B! }: }# a$ F- {: s
asm(" nop");
3 D/ w v/ F/ f7 Z ^7 L/ S$ O
' H# n5 e1 b. |9 z' k$ o
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 J3 y% a1 G% c s5 G% \7 I
}
6 l; I2 Z5 C7 A! t
$ f4 y7 a6 _/ W' r5 }) O
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. n* J4 A) A% j0 M
//UARTprintf( "i=%d\n",i);
- w0 V7 g$ z/ l4 n2 U
//UARTprintf( "j=%d\n",j);
6 ?( f v6 m1 v. E; |8 I4 h9 ]7 h
UARTPuts("Data mismatch in buffers.\n",-2);
- _# a8 S7 h9 L
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ F7 |! S3 [) D M L9 Z
{
. _! U+ x' K3 K0 D
for (i = 0; i<upp_frame_size; i++)
0 A& a1 Z& `! w' r% r' L
{
7 \2 N$ [, S5 h/ @( k5 A* Y
if (upp_buffer_a
!= upp_buffer_b
)
. S; n# S" @* U* B9 T
{
1 Z* ]& } z% q6 ~9 N0 J, U6 \' A: w
upp_error_count++;
- \1 f+ {6 J% | T
}
j! P6 U8 B5 `% m) p5 H
}
- `( o3 u9 S+ L( E
}
+ p9 a: _6 H7 g$ ?
, }# y7 K# e& a& u' A9 t
/* 报告通信结果*/
8 ]2 Y. h% n ~$ i4 V2 ?
if(upp_error_count != 0)
7 o- A0 M) }" P0 X# R* O$ c
UARTprintf( "upp_error_count=%d\n",upp_error_count);
! t+ M a- d2 u- Q u
else
6 a9 R7 W* ^6 f
UARTPuts("uPP transfers complete!\n",-2);
) U4 c9 f3 J& [- N
/ B. ]3 o0 Z/ S
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* i; s) A' M9 `2 F5 I! F2 H
UARTGets(ch,2);
9 ?4 C- @7 L2 j5 q- S3 j5 s. s+ H
UARTPuts("\n", -2);
5 @. ` K3 E2 p. o$ S( m& G4 ~/ M, Z6 X
/ a6 ~& i* ^- |( c3 e0 X1 Y$ i- i
if(ch[0] == 'y')
4 |7 e/ J% |$ Z$ j1 T
{
; c" B6 O$ U o [6 W' P& } P! F
/*打印全部读到的数据*/
, v1 e; V! r1 R( ]/ H
for(i=0; i<upp_frame_size; )
* B) |: ]9 g( Z" d
{
; R' p2 e' f. _7 ~* G! s
for(j=0; j<5; j++)
9 Y# I" {# l+ k# p# [4 U
{
6 a. J# x2 m1 z* B6 u
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( T* N5 v6 `& ~
i++;
/ [# y% [# A: W* ?4 a8 A& L' K$ W
//if(i >= 4096)
" v8 T0 u) b6 M1 M) M
// break;
; Z* o$ ^- U5 I: s q
+ B1 e; y- m5 d- m7 _+ D* G4 Y
}
$ |3 C8 j. f; x9 E- p
UARTPuts("\n",-2);
$ g. |! Z1 H1 K- Z; v
}
3 H9 u7 D: [8 P; p: o
}
2 U$ A# M1 a4 R
* L& q' ^6 `) d
}
X* C/ P& k$ @ w7 T9 q' r9 L8 E) Z
$ w. o* D7 D7 u9 K. q
3 s1 |+ [! J( ~3 C$ `
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 d) Y0 v1 C/ \" b j c& u: p
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, L: w; T! A& U1 v: E, x2 \* Q
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4