嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! V, m4 b4 \: l( X' M# }2 B- ] q
Void UPP_TASK(Void)
! F# P) g' |9 @7 t+ X
{
' t3 J( @! `, f! z/ {& p- M
! ]" }( q f, S! y1 N$ a
int i,j,k,target_int_count=2;
9 W' z% `9 _: c
char ch[2];
3 a0 Z l3 `0 M4 z% W6 v. ]) e
& P& |* d) C, h; [
* q1 m- Q7 N" p9 R+ u& u0 n
: I- {9 o1 ~4 }- _# m% w+ |
upp_interrupt_count = 0;
0 [- `! B7 Z9 A5 L" V( J4 H# |
upp_error_count = 0;
6 e0 F6 o$ e1 E2 ~
3 } p/ y( F9 e/ {$ z1 E% _
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( N$ t) G1 y$ s
// Initialize data buffers
" h$ C+ L& x7 A- F4 a& a
for (i = 0; i < upp_frame_size; i++)
. {; z* k: p P# {& G" F9 ^- g! _
{
( ]! t. p# E0 ^# u
upp_buffer_b
=i;
1 d$ `0 q$ \- s: I2 R4 T! u# G& p
upp_buffer_a
= 0xDEAD;
! U" \! ^/ s H! R( }' z+ O( q* d
}
: ~7 N( ]8 X2 w! ]6 f9 g: k
6 J- F0 a( d# y# M" G
//for(i=0;i<1024;i++)
, y9 ^8 K$ O7 M$ \6 I
// temp
=0;
$ B% O. O9 D1 D) M
Z( D2 i& z7 j& X
//UPPReset();
5 N* |4 ]7 M- Y- H. Z0 e+ X5 g
/*启动UPP DMA传输*/
, i* |+ G& P. P: [% J, f
UARTPuts("upp_prog_dma_i\n",-2);
' x1 X7 J! p! O0 @5 O: v
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( v9 \% h0 ^* T& R. M6 ]- k8 E3 k4 ]1 [
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; a5 |0 ~# F# o6 G* y) D$ |
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 ^$ m, |/ K# a4 h: [3 X/ J
% j3 U. @3 }7 b$ M
UARTPuts("upp_prog_dma_i\n",-2);
$ v( l6 C: J6 o0 L1 r9 O. R
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' O9 t( |, ^* x' R6 ^ W) O
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
Q2 A! n: } @& Y9 o( v/ }
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 o3 l3 z* S$ N# c) R/ C
, l* g! u) d" [8 ^8 I+ V- g
/*等待UPP传输完毕*/
t- D3 E- N. _3 l# S/ f
//i=0;
& {7 C1 ~& A0 N' k" c! W
//j=0;
! r; T( G$ p' O
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: q, g6 p: T3 S, ?! F* }
{
# [1 @- o; ?9 t) Q
/* 测试UPP传输的同时操作普通DDR数据
3 H2 j# Q2 t7 c: ~
temp
=i;
. K1 X& j2 H \$ d+ S( n. R) s) g
i++;
* K- M+ x( y! W
if(i==1024)
9 y# u5 Z. d6 I: N9 a
{
. |; ]/ ? ~, H; g2 y$ ]% ^/ t
i=0;
" J2 @' }& x2 a% T
j++;
" D9 D4 b7 T/ L3 ]" h
}
1 h7 d% Q- G: f7 u4 {
*/
2 T4 N; R- j: }2 L. F/ H4 O6 y
1 I+ i" _/ a, P! j1 a
asm(" nop");
8 ~% d- p, I9 m- X& e
" P" p& G& f& z, s
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, y1 j1 g4 U( r7 c0 p3 c% t" s y4 _
}
3 t6 |+ a9 z( @9 q. J2 ]1 E% t
! V A7 K+ x: I& \1 j' ]
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( T4 r( ?& W9 g8 X- G% z( q/ h3 W+ j
//UARTprintf( "i=%d\n",i);
7 ]) L; M' q) Q( Z- N* \
//UARTprintf( "j=%d\n",j);
) P* _% A2 {- G: x/ k
UARTPuts("Data mismatch in buffers.\n",-2);
3 W3 `! ]1 ?9 @8 Z3 }8 D
if (upp_interrupt_count == 2 && upp_error_count == 0)
, ^/ Y# j' U2 q; b" V5 W4 w0 U
{
6 T2 a3 s- o4 d. A. ^2 s( q; m% X
for (i = 0; i<upp_frame_size; i++)
% K6 V& ?4 K( N5 W" }+ o
{
u6 i7 D0 A0 X$ ^- S! u% `/ `
if (upp_buffer_a
!= upp_buffer_b
)
% D( Y7 P. @4 A- A+ @ p4 w
{
: W. y4 U4 L/ I, N7 `+ F
upp_error_count++;
! f* ]3 e: A% g _3 p3 O$ w+ J
}
. @5 F# O X- M5 x
}
4 Z9 m$ o8 J' d; Q$ o2 y$ h" S- x
}
8 u3 T) Y) w6 e+ l. X! @
1 I3 G. f0 H3 j
/* 报告通信结果*/
* I6 y5 x, j$ l- ~* G8 Z' `' c
if(upp_error_count != 0)
: Z! @2 C5 p4 H. o
UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 b; {. g6 [# V+ j# m' n
else
" ]3 f5 o# v- V; S# q
UARTPuts("uPP transfers complete!\n",-2);
/ t3 N8 y, v* U/ \* }; K
4 D, P) _0 b8 r: X2 P
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' v* A a: \5 t
UARTGets(ch,2);
0 M" l" c; H6 M# |& G# }
UARTPuts("\n", -2);
8 ~* o7 ~$ U# Q, a
0 T0 B `7 p3 F% q- j' {
if(ch[0] == 'y')
6 e4 ]; z& P3 \7 _% W8 m
{
- K! j% L8 |/ ]; `3 w5 O0 s
/*打印全部读到的数据*/
! l9 @2 X! m8 X/ e& [
for(i=0; i<upp_frame_size; )
" X0 H0 T2 c5 v* W8 G
{
% l: c: `# W% W+ o2 b
for(j=0; j<5; j++)
0 ]$ e2 h! q3 m7 O
{
1 [' y3 c8 S0 s
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) k+ B/ d$ J! V: R# e& h9 ^
i++;
: O7 P% ^% y* ~8 v) I4 H
//if(i >= 4096)
4 X- r' w8 ~6 Z, @9 [
// break;
' e8 [8 m @& q
% K& K+ D. X4 p
}
# s; X2 G: |8 z9 L
UARTPuts("\n",-2);
) Y/ ^8 B9 w! ^7 u8 ]( ]
}
: j4 v' k2 Q8 s8 N
}
% r' t, {( ?5 ~: U2 q- l, w# D5 F
6 j5 c6 |' U& d0 @/ g9 R/ o
}
: Z3 C8 O/ x# L9 C
& V! y' ~: j( w$ h
6 w6 L" d8 J- D9 ^+ M
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 v, u. D. S! L3 V0 J
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 i& x9 u; O. i2 [5 a* B& y: D- W% X
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4