嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- m+ g! H, G; Z, N3 o
Void UPP_TASK(Void)
7 j6 j% [* E% P$ `
{
' b8 n" v! L+ ?( ~/ O8 n
5 F. y4 y }3 h4 p/ J8 |
int i,j,k,target_int_count=2;
) j; W1 [1 V9 {! A$ g
char ch[2];
& `; V7 ~4 i7 R. ^2 w! w2 t7 j
% U- o+ L5 B7 |) m) F* L
+ b; f* F5 e" s! p% e( h) T; \
; R/ x, `! o7 Y! s3 _+ d
upp_interrupt_count = 0;
% j' L3 e. j5 D
upp_error_count = 0;
, ~" B; w6 `, b
' \( t4 D6 T4 M+ z
UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 p% w+ I: |4 G+ x/ }$ u" z, B
// Initialize data buffers
3 o9 u6 a; a! r7 ^: O( l
for (i = 0; i < upp_frame_size; i++)
" P+ d ~1 r0 q" p
{
( R0 D6 M9 g* v
upp_buffer_b
=i;
7 H0 m' E c) L6 z% K8 k
upp_buffer_a
= 0xDEAD;
! t% w/ z Q7 x
}
- H: O% U# J1 X4 c- T3 Q& z
. D# V. X' o8 g
//for(i=0;i<1024;i++)
; @1 |% ~- S5 c8 q; \( E
// temp
=0;
3 D( \5 w d7 x: x7 b/ {
}6 \8 s5 v5 {2 R
//UPPReset();
4 ^5 ^& T; s9 p/ r/ O* Y, Y6 u+ ]# ]
/*启动UPP DMA传输*/
- K1 s7 \# x8 R+ a
UARTPuts("upp_prog_dma_i\n",-2);
2 Z9 H2 g8 f. |3 a
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; c/ d9 r( |+ W, K
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 e, V/ t; N7 x
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
H9 ~& t8 e. T) A
1 m- l: w9 }8 X& X
UARTPuts("upp_prog_dma_i\n",-2);
' g. H2 Y& X$ A) Y2 L
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* S4 ]8 t4 ?. C% ]; U( m4 n
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' b0 |. d8 ]$ @( |* N3 T/ u! A
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. ?( q0 f8 E9 q0 } t
% Q6 C$ g& v) P
/*等待UPP传输完毕*/
! F/ Z! [. R1 Q$ c! |0 ^
//i=0;
- b8 b/ Z& P) z( U7 z
//j=0;
; Y7 H: g6 R" N( q
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! I4 U4 F1 J9 t( s4 @% L# N$ J
{
- o8 ?( _6 j! S
/* 测试UPP传输的同时操作普通DDR数据
9 f D. k4 T- h# s( {$ E: S+ J
temp
=i;
( B" x* M- t3 b) r$ M' i
i++;
8 J7 f7 n9 T* ?& [
if(i==1024)
" G( D$ J( Q4 ]4 w6 l& b
{
6 N2 Z" T8 }; [+ N4 j
i=0;
: F* T; s- ]3 s$ G X' Z
j++;
! P$ d' x; L0 A7 r, ?, P! M
}
# r2 b! _+ L' v3 S4 Q( e/ t
*/
6 D7 l* w, V! m2 r0 w
! W* J" I( N6 Q: O; Y( T: k/ R1 |
asm(" nop");
2 p2 {! E# m! J8 E
8 ]0 t' E* {0 C) X8 t
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 L: W# P. \( A/ p; T4 L
}
$ l* l8 r( D% A h2 O
; X* }+ o, x0 @7 u% u- M9 V, g
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 h; _+ {5 z3 {0 W& S+ A) h1 V
//UARTprintf( "i=%d\n",i);
7 I- r" N) D4 A& t+ W
//UARTprintf( "j=%d\n",j);
3 O6 C7 k, j& g
UARTPuts("Data mismatch in buffers.\n",-2);
]; d2 `5 H/ r7 F
if (upp_interrupt_count == 2 && upp_error_count == 0)
. K: s* m& ~1 [% `" ~3 E
{
1 t( ^( L% ]$ }' c9 ?
for (i = 0; i<upp_frame_size; i++)
2 Y5 B* g* t/ B4 o* s6 y, U @
{
' o8 g; }7 L& Y" N; O( R
if (upp_buffer_a
!= upp_buffer_b
)
, b" M3 l7 y! b4 X% |( Q$ i/ r" C* U
{
. x* D/ t5 v& a6 G) M8 P) i
upp_error_count++;
, l2 K9 H3 z0 r/ K. y% ~5 K
}
* w }8 x* C2 t/ o) r
}
7 X2 U. \2 P) K4 @5 h8 f
}
3 [4 r" Z2 F* a) `' H
/ _3 {& Z. `( K. o
/* 报告通信结果*/
9 K% f) o* m7 J- k& ~
if(upp_error_count != 0)
( }2 {( Q+ ~, m5 v ~
UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ B. c0 S0 E# @2 f: _* N$ |4 C. A
else
4 z3 d' M! w& L0 w
UARTPuts("uPP transfers complete!\n",-2);
- `" K( |! l8 l! t0 s2 ~& H
" l$ f* O/ H) C; y; u) }0 r
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 [, U( y2 Q. E- C- C
UARTGets(ch,2);
! g3 }$ B, E& W6 |5 q! G- Q; ~
UARTPuts("\n", -2);
( ~" r3 }: A! l
T/ \; J' g5 Z% y
if(ch[0] == 'y')
$ ~ g3 V I& n$ k% V) H6 M
{
3 W: v+ l7 s! n& i3 P k
/*打印全部读到的数据*/
3 W( ^1 r( G6 |+ q
for(i=0; i<upp_frame_size; )
) K3 E& }" h4 L2 N. ?3 \
{
0 s" I3 ?9 x$ x( V. }$ n3 p
for(j=0; j<5; j++)
8 Y/ K5 Q. E6 L& i: W% l& {
{
* [' k! v7 a) F
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* i8 G& W6 y+ R+ ?) n$ J+ G- v
i++;
( v$ R g0 w3 J
//if(i >= 4096)
; E- M Z- A3 F: y X
// break;
) h/ I: d1 f, h5 w) L7 G
( }" M+ q0 g/ t' Z. U+ e
}
- v K. U. [1 T" Q4 B- H
UARTPuts("\n",-2);
0 p6 B% K' ?& n/ l2 k3 c
}
; h8 T6 A$ x- f9 ^
}
* s; `/ U* V& [
8 f [" o% }+ n' W6 i4 g% C- j: u
}
* W1 ^5 B h4 \3 _
3 H: A8 ^2 F3 a/ Y, x- N4 p# T
2 K2 L# @& z* z0 H6 {5 d
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ u. T! i. w$ o2 ^9 t2 n
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ L( [" d$ Q! `8 `$ c; t; z
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4