嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 i% t& W5 K& g: I
Void UPP_TASK(Void)
0 p- g5 G* Q9 Z' i
{
% A/ X4 t4 E% k- E! H. `* z# f
! ]' F# Y' M. G) z/ H( F5 q/ B7 K" R
int i,j,k,target_int_count=2;
0 m0 x3 O7 ~* e+ p+ K! r! u" F, o
char ch[2];
9 b2 f$ [$ |, F9 J+ [' p; q
4 x- g" w" }) ~! {1 x
2 u: m4 n+ [$ b5 N$ E5 \
2 p7 r& @0 H' C8 N, K3 C
upp_interrupt_count = 0;
; k8 W6 N4 t1 |+ \ \
upp_error_count = 0;
7 T( u$ E5 H- A+ h P
% R( I: g/ Z, h
UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 n9 ?8 ~0 [# N- E# C2 M7 G
// Initialize data buffers
Z# H. z" _1 y3 A9 c
for (i = 0; i < upp_frame_size; i++)
5 X) u8 [0 R$ K' s0 \5 [8 I) A
{
+ G5 j! F% [9 E$ \; X8 A6 m3 `/ o
upp_buffer_b
=i;
4 k# L* ^4 P0 {. S
upp_buffer_a
= 0xDEAD;
+ p9 M$ {3 d* Q. a( }6 r
}
3 e# ~) x% n! ^, J/ j1 o
& l3 ~9 U+ c e
//for(i=0;i<1024;i++)
* _, T9 K. J) Q I
// temp
=0;
) Z9 b( N' [9 H; |5 X; ?7 P# f
9 ?! w/ p" e [. @
//UPPReset();
6 r9 |6 f1 U7 S+ {$ S: Z
/*启动UPP DMA传输*/
7 N3 `" v" v5 c5 o) |- W. T- A
UARTPuts("upp_prog_dma_i\n",-2);
. P P- _+ g" Z0 e3 L# d
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 F5 l2 a2 e7 }. |- I5 o
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# S! s) u) T' y
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 q5 J+ W" m9 g W% h ^% c
7 U' h U% e1 o/ O! A) f$ J
UARTPuts("upp_prog_dma_i\n",-2);
! d! R) u$ P0 V3 k# A( |8 a- g3 d
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) ]# G/ F' B7 O6 T. {
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 |' L; f" \+ y& Z
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% E8 a. V, T; L2 j9 ^
! w3 x4 j e- ^& v. V
/*等待UPP传输完毕*/
' i4 w6 {" U. k4 B& U$ v
//i=0;
6 F/ _! J3 u3 d2 K+ W0 a. J' \3 r
//j=0;
# S9 y! S* R+ k- F4 \6 A; C
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- q# z. a, h0 r$ l! n" [& K3 f/ r9 h
{
, E) g3 B# O& O6 }
/* 测试UPP传输的同时操作普通DDR数据
5 p/ N2 j' i s k3 v& `3 Z4 X/ |# C/ w
temp
=i;
. z% Z" B3 A5 q+ ?) Z. }
i++;
1 S* n1 W$ E! R/ H- ~( k
if(i==1024)
( @9 A5 N) I+ |8 ]
{
8 J4 w( e5 t V
i=0;
9 \- ~ q4 d' g8 o, A/ O) U9 u
j++;
: E9 u' x' v8 c% b: T
}
$ i+ x; Y, Z: Y. e/ T' g& k
*/
3 I% w3 H! d- s$ E( I9 h( |$ v
( h3 v2 V* ]' n# ^6 Q
asm(" nop");
, n. L% h" x( J0 i0 L
2 h" j; y7 x% ], g
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 H* G7 V2 |5 s8 Q
}
- \3 h" D- [7 @" c4 J5 ?
- |' L6 _/ { [0 A7 W
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& b9 f$ d$ b. R4 g' F0 C
//UARTprintf( "i=%d\n",i);
/ z/ |' Y/ _6 G* t+ a" k- j: b& }
//UARTprintf( "j=%d\n",j);
& q: f* z. p! n! M! g
UARTPuts("Data mismatch in buffers.\n",-2);
$ S2 H* [3 M! B
if (upp_interrupt_count == 2 && upp_error_count == 0)
' `( G) |5 u. s9 l1 g
{
0 d( ]+ u5 J, m6 J7 E' h3 u
for (i = 0; i<upp_frame_size; i++)
0 e2 J& Y1 X' W! H/ I
{
% H7 d1 H& o+ n* i S
if (upp_buffer_a
!= upp_buffer_b
)
: \% L( _0 r: O2 P8 S* t s
{
9 H" ?" A. N) \, m
upp_error_count++;
# \3 p; h( { m2 ^
}
6 J* C) g `. L$ i: \& t! h5 ]
}
# Q4 }/ q! o" M; Z ~& J
}
# ~, P. a1 C/ {' k% D
; Z T' L, Z& w1 v% l; p! ~
/* 报告通信结果*/
, y5 @# W& m! [2 d1 Z; u
if(upp_error_count != 0)
5 j5 ^3 l2 f2 m8 }+ @
UARTprintf( "upp_error_count=%d\n",upp_error_count);
' f' r8 l0 t/ _7 m- V+ K8 u
else
0 s6 e [) X. g0 ?4 _% k
UARTPuts("uPP transfers complete!\n",-2);
$ h# w9 R$ J5 X7 T4 S9 @6 A7 a
& [! E+ a6 [1 J( d
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 D; K( d) ?4 \& G( w7 ^9 B1 _
UARTGets(ch,2);
P7 l$ A( T# `' c0 E$ d6 V* r1 U
UARTPuts("\n", -2);
, r4 k# H" u$ W. g! c' l) g$ P% u
* J) B/ |7 O- W
if(ch[0] == 'y')
- h: X4 \5 }2 J7 w: m9 ?
{
5 N( Z) d! E7 k V$ v. R3 q* y" \
/*打印全部读到的数据*/
' E8 S" l: N, r+ O( a
for(i=0; i<upp_frame_size; )
8 s" N" p- q9 w$ N) {6 [
{
6 w4 b$ b$ h% L5 G" C
for(j=0; j<5; j++)
" {& ^- `# O/ U
{
; ^& [# n/ W3 ^
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 h0 _: g0 M3 K" I7 u+ e
i++;
% B% j: k7 i" y* N. P7 F+ M% a( C
//if(i >= 4096)
% d* v( E% f$ R) @! m5 S
// break;
' S/ N6 ~* R& A- u
4 z& g# R# q0 p
}
; l# [8 E, S. M! i) k$ J
UARTPuts("\n",-2);
. N' c, H7 ]" F" h
}
7 Z# g% z3 }( g
}
4 w4 u- ^1 A) o% {$ x9 I/ V
. d* W& q! P9 Y0 y) F
}
$ j0 r% B% M' j9 C- z
+ Y+ k% R" z. O) z- M
1 \* a y' }; w. b+ I
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( A8 o( U- x1 A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 \9 I4 {( J4 O. U
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4