嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& y# [( }4 n8 J) q7 u5 U: r
Void UPP_TASK(Void)
5 b ]. Z) B) M$ I
{
; \5 Z/ [7 f3 L6 {" v
* S6 s4 H# s. A A f# Q1 d
int i,j,k,target_int_count=2;
6 U+ P1 P, q) x$ m+ T
char ch[2];
3 V2 A+ D9 \- n9 `2 q
1 H9 |+ u) A6 X- W+ \3 q8 T5 F: I
2 A3 i" s6 m( P+ D
% b0 V9 _- n0 E( Q2 z% r) E
upp_interrupt_count = 0;
6 j; Q- d! Z$ z5 i% n& I, O
upp_error_count = 0;
2 y% X+ c! L$ P( ]8 ~
# s* Z! F$ ]" E" w
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& ~- B" k: i: a' }; r) h$ i
// Initialize data buffers
/ |6 U2 Y5 ]4 q m5 c
for (i = 0; i < upp_frame_size; i++)
. B; f; ?- f5 T4 ?. ^' V: P! o
{
% k, R0 ^- Z' @2 y; z* K
upp_buffer_b
=i;
# t8 p# J1 G% A' b' @1 g+ y- I; t
upp_buffer_a
= 0xDEAD;
6 i9 f6 K' p; u& \& b9 f
}
- j7 j& v/ M4 R/ _9 P$ J2 k+ n; N
) Y; C- f& E" P( ]" J
//for(i=0;i<1024;i++)
5 g! N) l4 B7 e! x9 Z, p
// temp
=0;
- c# K) _1 x4 t/ S* g! d+ u! h B6 h
3 `0 s8 z r& m( D, G
//UPPReset();
" {: N1 ^& f, G' w5 F+ I1 u1 ?
/*启动UPP DMA传输*/
4 r6 x3 G4 B4 B; d' e
UARTPuts("upp_prog_dma_i\n",-2);
7 ~) o* M$ |% a- F- A, {
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 z; {; e: b, J& ~; R4 ]& ^
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: X n9 O7 s- L% [3 [# L3 X
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) p( O! B8 `! R6 E7 t* _ y- \
* F: B9 h L0 g# o: G9 I
UARTPuts("upp_prog_dma_i\n",-2);
6 a; F: x. _6 F" b' v! B0 t: J
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 t& z, s; q+ z: o9 j8 X
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 U0 n/ q; C9 }% g; ~5 a! @4 H
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: L* ]1 K- P, p, [0 _4 e
9 l& W+ i$ r0 X$ v% {4 F3 ^, u- n5 l9 r
/*等待UPP传输完毕*/
( _% Q9 H. J, D v9 ]
//i=0;
7 Q/ v: ~3 D: J! w
//j=0;
8 Q- S/ q/ g$ N. V+ K w* i" g/ G
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 E, v+ t4 A0 R1 Z
{
2 H( Q3 K( s4 j: ]! b- h7 S
/* 测试UPP传输的同时操作普通DDR数据
. W- c5 }0 `2 e, N- M; J0 R
temp
=i;
4 W5 M* W$ {/ o8 k: v
i++;
; C, @" o' F+ h' n! q) q
if(i==1024)
4 O" S4 C3 ^# A; @& n
{
, }8 X5 f. E% p0 O" |1 t4 O
i=0;
0 k* j) I/ q) h4 L$ [& t( `
j++;
. g# \& g4 i$ @8 `) h
}
+ Z8 G3 \& E8 ]* h; y
*/
% L; E7 _% G. {( U! T: y
1 V' q% d9 K; U4 U8 p
asm(" nop");
9 Q6 G* Q# C' q" y
* P% E" w9 a# |+ f% U" F- j% k
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. T* G# }/ E, K7 _4 s+ m2 n9 E" ]
}
, B4 c& ~. t# K
/ e, y! I7 A* b' h; E1 s' v, z; m
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ O* o+ ~) w) Q; P( E" i' ?. i$ }- N& e
//UARTprintf( "i=%d\n",i);
' g1 j; l) o' x% U- n1 }/ \+ h
//UARTprintf( "j=%d\n",j);
5 @% A# c3 r( N2 u1 c
UARTPuts("Data mismatch in buffers.\n",-2);
6 m# n# E* V, O A
if (upp_interrupt_count == 2 && upp_error_count == 0)
% V, `9 h1 ~+ g y6 J
{
7 d4 w S' C$ f. @7 ~
for (i = 0; i<upp_frame_size; i++)
$ }# E6 j8 a" H
{
' ] L: g+ W( |: r& ^
if (upp_buffer_a
!= upp_buffer_b
)
/ ~& {5 `' {; d& S i2 y
{
4 y5 y% O1 y! w# s6 p
upp_error_count++;
; R9 x1 m0 ~1 f c: |; \
}
. {: I, F9 \2 ^
}
0 R' [$ q3 h; [+ Y
}
" G! W: E% `$ y
0 Q& g7 M, f$ P5 R9 R! [# x
/* 报告通信结果*/
0 x. B( `" s- [9 O4 E% z- N& b
if(upp_error_count != 0)
6 G+ q# ^0 Z C" S2 e5 I! c
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 t% z7 C0 C1 P! |% N
else
$ f/ ]+ l* x, @, S) t
UARTPuts("uPP transfers complete!\n",-2);
# N6 G1 g9 L. A4 i6 t& S' {( S% F
( `+ t- H% G* c! a6 \! N+ i
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 O# @. c7 A3 q1 `
UARTGets(ch,2);
) h9 O* P. W; @/ {6 R' M8 Y
UARTPuts("\n", -2);
: ~# ~2 p" r* D
7 N# w% T G, K2 G: `; _
if(ch[0] == 'y')
* i+ j6 |" b2 d/ }2 z3 R3 P P, x
{
) v( f, ?2 k1 T% ]6 I. G) v, g
/*打印全部读到的数据*/
# m$ Z/ R% o, [: u
for(i=0; i<upp_frame_size; )
; u+ {6 \% b3 q0 h5 n; [
{
* p. p, N6 z Q" x2 z& R& b+ z
for(j=0; j<5; j++)
+ h3 Y( T t: Z, s! I
{
0 L- p( B% y* r! P7 k
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- N8 I* I$ i% C) M
i++;
. k \$ a* m+ o1 R6 H* p1 j
//if(i >= 4096)
\: N* d5 }1 f" J! |# }6 z5 ^2 S
// break;
4 p- {: X5 G4 M8 x$ q) R# a8 t1 T
V3 |9 j" Q& B+ |
}
. m$ A3 _, E: L, b
UARTPuts("\n",-2);
9 ]" G) ^! o$ \8 L* T5 a% v
}
* u1 g( @0 v: D6 m; j
}
. _; N. `& s, N# n. u1 K7 t
* ^4 j) m/ T0 w$ [; M) r
}
) i/ S7 V; O4 N7 @5 u
& x) U3 |( y5 a% R0 `. k
9 `: {! G# k' K- p) f/ P4 U
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 L3 ?# `# q: P
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! Q( a7 F6 k; S) B: T% O
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4