嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: s3 @; P9 ~2 j7 w7 p
Void UPP_TASK(Void)
8 r8 _* T* S: \9 C4 F: ^
{
, f$ j2 f* K* N1 J2 a- k
- _. ]0 F# y0 k1 r$ y
int i,j,k,target_int_count=2;
2 m( o4 ^3 t' D) i2 u+ ~
char ch[2];
. O& o9 o: R8 i8 R4 f, N0 D
" j" S& W; V$ r. M, [# k
7 f: b" p9 v: _' X, u5 u" Z" l/ R! D
$ J* u5 R" A5 R3 W: f$ l
upp_interrupt_count = 0;
. }; S% u7 o! l! `2 d
upp_error_count = 0;
' ?+ w- k P, |* d8 ?
- s7 F, j, j2 P9 h$ h/ v
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% b; a. T$ t/ ]- f1 n: I+ V
// Initialize data buffers
7 B5 J& G0 Q: w6 W; g
for (i = 0; i < upp_frame_size; i++)
. x* v6 n- ~4 Z! R1 ^
{
0 @) b- N& I% ~' ]1 E% |
upp_buffer_b
=i;
' |3 s* w/ I0 }1 b, ]% V" G
upp_buffer_a
= 0xDEAD;
! ]8 L6 p5 c9 k+ X: a1 w9 i: A
}
7 F7 {# `+ l: ?5 C
R6 x8 s3 m( x) G% M7 e
//for(i=0;i<1024;i++)
: ]4 \ q; Z0 A. O" k5 V. t0 e* R
// temp
=0;
- k4 L# k+ N; n$ @. R2 _
; D' Y7 O6 k2 K( e. K5 e
//UPPReset();
u% Z6 U% ~$ Z
/*启动UPP DMA传输*/
T n1 ?6 k( H
UARTPuts("upp_prog_dma_i\n",-2);
- f/ T2 ]" q9 M$ t9 B7 s4 @
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 H. i7 Q: R+ S7 y- T5 M
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 G2 ^" G9 `: o7 V0 ^7 ]& O3 q q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 u% q+ ~1 n& C! L$ G, u# R* l
; s/ G( m6 h. C# z% l5 U
UARTPuts("upp_prog_dma_i\n",-2);
& I9 i$ I" q" h( E+ i
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ D7 p) M, ?. x9 a3 I
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: L! Y7 R6 M% T# C( P0 `
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
W) C @' k* ^2 ^# F/ }% A
) }1 @+ W/ [ z8 q9 j
/*等待UPP传输完毕*/
6 S ?" V- ?- Y1 U' J: c
//i=0;
/ ^+ v9 P) y+ r# d' e
//j=0;
7 ]3 `6 z( M3 T; |; g: u
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- T7 K# A- G4 v; U- H
{
% L/ ^+ h9 E7 ~% K L* q( ?
/* 测试UPP传输的同时操作普通DDR数据
' U/ v Q* j4 t
temp
=i;
* H- I j/ \" D, g) [
i++;
' t, T$ q5 e6 W: E4 L0 n, ^& L
if(i==1024)
6 r: F7 r& R! H7 G3 L- c
{
& [* `% _& T% s& @
i=0;
' g6 i* P# @7 R% }, ^' Z: l! k
j++;
: ], @2 n% {" P& {+ d7 p
}
7 q, E4 a0 `6 Z- d
*/
% p7 n& H8 \! q# ]
7 d0 {4 G/ a# T, _* n0 c/ \
asm(" nop");
% {5 {" N0 w' i9 z- S9 H/ J. D
/ l# A- {0 _8 j( f8 {0 t
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" ?' G7 I3 Z2 g
}
/ ^4 {7 b9 b- Y. r* ]; ^/ D' s" s9 h
( I9 V9 |0 r( K1 T
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 @8 v( m9 ^2 P' S/ j- G
//UARTprintf( "i=%d\n",i);
9 P6 d& P U4 E$ u% E
//UARTprintf( "j=%d\n",j);
# H9 D2 A: N4 d
UARTPuts("Data mismatch in buffers.\n",-2);
* \: \0 m; N1 \$ J; k
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 r3 F6 V [" {
{
2 J {; x+ Y! S- H
for (i = 0; i<upp_frame_size; i++)
" A% n9 \! I9 Q: `
{
6 p/ ~5 ^1 x" X2 v& o
if (upp_buffer_a
!= upp_buffer_b
)
. g J0 p8 K8 B0 c1 j
{
[. {0 ^; k# B* i8 b1 H8 u3 j4 Q
upp_error_count++;
/ M2 W2 Y D4 U# W- M0 E: G
}
6 r( `7 N5 Z5 K5 V' [; i9 V
}
+ ?. ?5 P" Z3 h' _9 X
}
# J# p5 P& i3 l6 [
: C z4 D/ R- G* G6 D* h
/* 报告通信结果*/
' ^6 j2 V7 A) S+ v- w" B# R: }% k- M
if(upp_error_count != 0)
' c3 ?; z6 I+ U1 H
UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 k1 ^( i' Z; i8 y0 d7 d& A
else
, F- n1 @* M1 Z& c1 g. w8 E2 @1 ]1 B
UARTPuts("uPP transfers complete!\n",-2);
" s: c% W C/ P, Y' R1 g" H
6 c% a- E4 z& F1 N# E' N
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' v5 o. y4 C, G w9 D, U
UARTGets(ch,2);
* j/ A8 g4 y+ g; }& R: H& a1 n
UARTPuts("\n", -2);
$ _$ Q3 g8 m* Z' @4 u2 R
! {' l) S$ [& I
if(ch[0] == 'y')
: T* j* _/ A) I; j9 g# o
{
8 G, X" k! V2 x" R
/*打印全部读到的数据*/
0 h3 g r3 q/ T( n
for(i=0; i<upp_frame_size; )
+ J: l/ H+ p! H: Y- z8 q4 _- v* m
{
( W" _- q# p! x F# y
for(j=0; j<5; j++)
4 |+ Y6 Q) x7 i$ {
{
& T5 O7 T# X6 |/ w8 \
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
8 O5 ~$ X+ W- x Y6 r
i++;
8 Q. Z2 \; p I/ N$ N! N
//if(i >= 4096)
3 D" b$ [. M4 E! p* q/ b
// break;
1 g/ Y' l0 \2 {3 j3 I
# J, |3 Q/ H* H6 ~: B
}
$ Z6 X- R+ @+ |; a1 z" ^
UARTPuts("\n",-2);
3 P O; X/ U+ D; ^
}
! S" b0 Z' w3 w* p4 v$ ^
}
4 p0 g; `) @2 P9 Z% z' C! a
1 T; u$ q& Z2 n- G5 \
}
* }# n- t- ^; ?" R
; s; S% ^% n( w; o! G- }- U9 V5 ^. x2 ^
4 {9 w( I* M) R1 y+ S
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 L- [4 M1 W# [* L
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ u' x; F" @3 z* f# k- v
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4