嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% Y; s# w/ F# \/ m/ i- p3 n4 E6 U, L
Void UPP_TASK(Void)
* K% j5 p% T5 ^7 U' G3 B
{
/ ~3 Y) @4 x- B6 e8 h; H/ ?, D
. d4 G: `' {% U; H' l4 _) N/ L! X
int i,j,k,target_int_count=2;
) p r. _; M# M: f! ^4 }; H
char ch[2];
8 L2 f- [( H$ L1 P3 U6 Z
2 M- T, p) D' \ ]
/ Q b0 ^' p6 L$ @# ^; v$ d
7 P+ ?% h) c) @( z- a& I' M
upp_interrupt_count = 0;
" L( b) P$ u" ~- G4 i4 ^3 P5 h
upp_error_count = 0;
1 `4 j& D- n3 ~' t/ |2 y
" f) A/ d% Y2 g- T! i& I$ a
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ A; X6 Q4 Z% Y* |. b. A/ `) ~
// Initialize data buffers
; v+ ?! {% t2 Y6 {
for (i = 0; i < upp_frame_size; i++)
J5 e% n% n- f5 l N# e L/ p
{
2 o: F4 I: j+ a7 v5 l3 M. p
upp_buffer_b
=i;
. q* G n( S: ~' A
upp_buffer_a
= 0xDEAD;
# {3 Q& u$ y/ V$ M0 L8 \& |% t
}
- K B; W8 Y7 `- F
/ Z0 @1 ^ x2 b7 Y
//for(i=0;i<1024;i++)
* O+ E6 {. r& _1 W3 k6 e3 P8 Z
// temp
=0;
) T! b& d) L' j) M8 H/ p
0 B- H, e) y J% f% O4 @
//UPPReset();
: p: i) m$ o, a( V: n9 Q4 N$ K1 V
/*启动UPP DMA传输*/
1 i! ]& ~, M! @
UARTPuts("upp_prog_dma_i\n",-2);
. T) @: z8 K2 c& m j" @7 x
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 f/ N( a- s. P A
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& ]) C/ a3 g2 {6 D0 F
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 c2 o8 w# g% F0 ^# X6 T
& G5 U" T5 E- v* ^# D
UARTPuts("upp_prog_dma_i\n",-2);
5 T/ e6 b: ]9 ~5 J! U6 W
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 D' L: [& v0 C, z
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ Z y. G+ g' H* f$ N: ~6 M. q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 n4 G: V/ @6 V0 o0 U' ~/ G
; J7 j, R) K; S+ u
/*等待UPP传输完毕*/
" N7 e+ m2 H9 ~( Q9 Y
//i=0;
) M+ j0 a+ X/ @3 X# ]6 @' ]6 h2 Z5 \
//j=0;
' y' _2 b- s& y( y8 l, |4 f" ?
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: t' W9 u$ y* s' K
{
& w9 O3 @" {# @/ T
/* 测试UPP传输的同时操作普通DDR数据
# a% E5 }2 R3 I& e
temp
=i;
- Z4 G" K. |$ Q, J2 ?4 j" T
i++;
5 m0 \! t2 G9 o0 a7 \; K# ]
if(i==1024)
/ t6 F0 i' [2 u. R) o
{
7 m# h# O+ K, H* } L
i=0;
, \' D) H, Q+ n4 w" p2 a' F- [
j++;
* u3 g3 A) \5 |; q
}
: W: X, Y3 w/ H# P& i7 F3 u
*/
6 P2 i C: ^$ ?; q
" w8 J% |+ Q6 ~' u; c* J
asm(" nop");
8 l8 S$ B, J3 Q
! s9 C* h5 |) g! S: K0 ~
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' ^2 `" } T* ]7 h: a
}
: g: Z: R4 B2 q7 V0 G
1 s/ L1 Y$ W1 y1 k, N: n
/*检查UPP传输的数据是否正确 (loopback modes only)*/
/ g& h+ K( J7 P+ W- z: }8 ^9 u- G- G3 g
//UARTprintf( "i=%d\n",i);
* H1 p a! m$ X
//UARTprintf( "j=%d\n",j);
, E, w/ |2 A8 Z \) M
UARTPuts("Data mismatch in buffers.\n",-2);
( {* s( i3 m i$ g& r7 W7 E5 I
if (upp_interrupt_count == 2 && upp_error_count == 0)
. _ U# Z" W0 z, T, D4 V+ q! o
{
. V- z: x1 R# h- Z( d5 J7 c3 a
for (i = 0; i<upp_frame_size; i++)
$ a( P" Z) @$ H
{
8 w( p% Q8 |. P: v/ S3 E' [
if (upp_buffer_a
!= upp_buffer_b
)
( ~5 v/ W2 e# p3 {+ l+ _
{
4 Y& z% U1 p: |! H: t, r! s
upp_error_count++;
2 L5 h3 K3 ?5 T8 o4 ]' G
}
. O/ i& d& X/ I4 _/ Z; O
}
/ E& }( y9 V$ ?: ?
}
4 n: `( y2 H4 k" @: n0 A
& z" ^+ s% q4 t8 E1 p2 U
/* 报告通信结果*/
9 C% \9 p$ C& y$ k; ~- O) Q
if(upp_error_count != 0)
9 }2 c$ \/ C5 a" n- R
UARTprintf( "upp_error_count=%d\n",upp_error_count);
' S; t& ^/ W$ x3 m, M5 J" L
else
$ N' Y% h/ X0 W0 s
UARTPuts("uPP transfers complete!\n",-2);
7 d* V. N6 x) u% s# x3 S5 o) w& z) q
5 W5 _6 y% p4 k- {$ A! f5 X( A! G
UARTPuts("Do you want to print all the data?(y/n) ",-2);
# e6 ~# @* M" ^: k2 k+ [* r. x; T
UARTGets(ch,2);
* u! M1 b4 i* p$ z# f+ s
UARTPuts("\n", -2);
* I' D- ~2 w7 ^( N
5 H4 Q5 K0 r1 W# l! w9 L
if(ch[0] == 'y')
9 `8 m. w* y$ L! ?+ B U- u
{
1 n2 J) |% t& ]/ k, E
/*打印全部读到的数据*/
5 {" }; B \+ F; ~6 c
for(i=0; i<upp_frame_size; )
! {0 ~' G) z* M- r/ O
{
7 \7 B* f" W1 p- n
for(j=0; j<5; j++)
( Y6 @) q, h3 k3 X0 k7 J+ ?' ]
{
4 t2 e/ R7 j" d. k# {
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; p- ~) i5 m$ j7 w& d) Q
i++;
; U2 D- X& q* J8 ~2 v( `. v* g7 O
//if(i >= 4096)
r! |, }7 Y; M. ^0 K% [# m/ y, D5 c
// break;
* y3 W* @- S! _& ]
2 Z8 Z' l( ~/ y v; M& U
}
# x3 _6 t+ }1 A/ `( V
UARTPuts("\n",-2);
+ B( J+ P8 o/ g( L7 f
}
( a" J' R _& \, j, R$ f. k
}
' Z: R) y9 E# ]/ m; I- [8 S
2 D; e( Z0 e U" Z0 q
}
5 k* D4 m* v; [
. v2 }7 K/ v$ C3 r' ^+ Q
. f- C& f4 q5 s0 r+ j* I
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" W6 e- [( i8 \8 ]+ b, S2 X
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( X7 X; p! O* f6 {, B) ]7 Y+ _
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4