嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 h& d; Y9 A! V+ R: }
Void UPP_TASK(Void)
/ ^4 Q+ ^1 s( V3 u' L5 ^
{
6 n* {& X! x( @% H4 O
/ o; @. ?7 ]1 }0 b8 Y* h2 l
int i,j,k,target_int_count=2;
- G! k5 m& i# d e4 e8 p8 p
char ch[2];
' g6 M4 P4 c% a* H( B$ @5 i, y
/ g4 ?0 y' Q* K# X! l
$ b- P+ f# |/ Y; P& o3 K" o
" z l9 J, t3 [% ?( }6 k
upp_interrupt_count = 0;
6 c0 J2 [: q: R5 m% p1 i1 i% P4 Z
upp_error_count = 0;
: u' A J+ B$ E! u4 z$ x
! J; d+ @6 ~3 x4 }+ r
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! ~) S! r( ]* T; n0 n4 f V8 a
// Initialize data buffers
0 C! t4 X/ s4 L" F
for (i = 0; i < upp_frame_size; i++)
! {( J; e, N L2 U: f9 L
{
; v' {9 j% [) j
upp_buffer_b
=i;
+ x3 ^' c/ S+ z ^+ z7 o) n
upp_buffer_a
= 0xDEAD;
! L; }# o% w- D# }8 y1 u2 g) e6 m
}
5 G( V B y8 v: i; U
- ^0 O4 g \9 X0 V
//for(i=0;i<1024;i++)
. w2 F' ?9 O' S0 `* b
// temp
=0;
% j; b' V8 L2 a6 H9 i# r0 G
# A# _0 l! {9 o7 [$ k6 m
//UPPReset();
# g9 h9 I* B; ^& y! J
/*启动UPP DMA传输*/
1 H2 G6 k/ U1 \7 ]. }
UARTPuts("upp_prog_dma_i\n",-2);
9 M0 C) F0 R. m! N# i
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 @0 z3 O$ |3 G) a7 ?
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; }: Q2 l o5 @/ B% \& I6 U9 X
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" M( @5 b2 T& S7 C4 N9 U
% B1 D5 [& O' {
UARTPuts("upp_prog_dma_i\n",-2);
4 a7 O" I1 L# N+ D. `$ n
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; x; c6 l5 A3 w( M0 a: S) {) |! P
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 Y- r# Z6 K& Y. T7 D
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( l* U5 i2 Z9 A1 k
! z7 W: w7 c- y
/*等待UPP传输完毕*/
! j- n& V; v, ~: z( N; x s0 `) Y- O
//i=0;
$ S9 }, h0 a4 A w
//j=0;
4 x- E. ?7 f2 ^5 `+ C, U
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
c# c. _1 S' }% A9 [* _; i4 B) v
{
: p/ M& q" K. A0 ~
/* 测试UPP传输的同时操作普通DDR数据
1 y# W" x6 I$ n
temp
=i;
7 w6 b A) O) R4 _: E4 \. B, J
i++;
5 w1 S' r- u% v. H. c; h6 U+ [
if(i==1024)
" Q9 A* n0 L7 h! d3 r
{
" \2 L9 }* y9 F2 T6 {
i=0;
4 |( A0 y# a# ]# M, R
j++;
6 |; I; Y+ r' n! }
}
8 U8 }6 a/ e0 o* J% W- l
*/
) ]$ L9 [5 y& W
# X# `% b5 n* `( O
asm(" nop");
$ k$ X" {! s9 z; X- E [
; s5 `! A0 V; f8 F/ {' K5 g
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* y+ q5 d# L& @/ y# ~0 g3 e3 v" I
}
" B' o* G0 w4 A+ M( Q: o
& D/ y( M1 r+ ~7 J& Z4 X
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 _# x5 B a i; H4 D( `
//UARTprintf( "i=%d\n",i);
v1 `3 g& y4 D. I: q* S
//UARTprintf( "j=%d\n",j);
9 u# O/ J {0 n
UARTPuts("Data mismatch in buffers.\n",-2);
! n# w: Z1 i& [
if (upp_interrupt_count == 2 && upp_error_count == 0)
( n* _- v- P1 Q" X1 E
{
' U! a3 ]& {( t
for (i = 0; i<upp_frame_size; i++)
; x- w; B7 t8 `
{
8 q+ U! U7 F" L" n( A, M+ B6 X3 V
if (upp_buffer_a
!= upp_buffer_b
)
5 z. @6 O2 L2 k
{
( r( f$ a3 L7 T, @3 C5 ^. C
upp_error_count++;
( A# r) R5 P: y, c" o; u" Y
}
. J, W; K# z0 ~8 z& J3 {
}
" I: j3 ]7 w/ q* J4 N' s0 H7 I+ D
}
E# j. A) j/ Z* t/ x
, V, x3 A, B! e
/* 报告通信结果*/
. E4 M' y1 w+ f, S' C& O
if(upp_error_count != 0)
2 W6 i. R- t+ e- S$ b {
UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 n9 D% k$ ^. R: H$ ~
else
0 Y4 Z' b& w! I1 ]
UARTPuts("uPP transfers complete!\n",-2);
6 O" j Z! i+ t! v
, r" c6 P7 P6 C
UARTPuts("Do you want to print all the data?(y/n) ",-2);
9 N B" p5 [4 ?# [
UARTGets(ch,2);
5 z" K; l: q6 s) l
UARTPuts("\n", -2);
! S) P( I, T2 }
* s% `' B0 V$ o4 x( z
if(ch[0] == 'y')
, O x5 ~2 q8 r' A9 l/ i+ w
{
X9 g" m+ X" l& W9 u. I3 Y# _
/*打印全部读到的数据*/
7 B3 S4 V! M3 W; @9 b8 _2 Q- y4 u
for(i=0; i<upp_frame_size; )
7 l: t$ Z3 l+ I
{
, `+ O" g: ^: U
for(j=0; j<5; j++)
$ O g) J% S' n
{
7 r9 K5 Q# I2 e0 r. x1 i
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* s8 H9 v# R! z
i++;
% J) U7 i/ Y J: x) L0 ^
//if(i >= 4096)
# [* g. S( [- h: Q+ ~% x" |; S6 s1 |; r
// break;
( K$ ?! X' a$ Z/ c
- I8 P$ O1 U/ z7 O! N0 j0 `5 w
}
6 ?, m: E: t& R
UARTPuts("\n",-2);
2 j/ P5 a+ l' _9 u0 h
}
" \8 \/ f2 V! B7 [. Z: w+ m; x
}
; V/ M1 z, [) @: w0 }' B
$ m8 v- k3 v6 o6 z
}
0 |9 M, u2 u9 `0 w% Q# q# w
. ?5 o+ r( G# | z6 a$ h1 C
7 H: e8 A4 _! l" J$ U
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' l: X: s& F% T/ W
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; k4 F! d$ s" p- P
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4