嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 b- R5 Z6 `2 x/ W( H% B8 J) [
Void UPP_TASK(Void)
3 M" o* |& z* m R9 k
{
3 C4 G: I; n3 _ m
$ d1 m8 n) u$ u* R; ~" i% f, J
int i,j,k,target_int_count=2;
9 E; M- f5 C% V$ F! j
char ch[2];
6 P# X m0 B( `, L7 Y& {3 z7 b
/ s1 t |5 \6 y# k, @2 i
9 e' ]& U7 b+ ^/ Z& B5 z* g
. U( d- P+ C( V a( O5 x, g& T
upp_interrupt_count = 0;
: w9 J9 o5 N+ k; Y, D6 A' z( j
upp_error_count = 0;
" J! i8 U1 N( w9 j' Y" k
7 H/ C% r6 q) N& S3 v
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: Q8 m8 a( ?1 m8 _. h/ Y" g: `( Y
// Initialize data buffers
7 n9 D2 k9 l8 ?1 b- Q* r! [+ L9 l0 U
for (i = 0; i < upp_frame_size; i++)
$ J+ z# P7 H) U# Z* t; t, c
{
+ Q+ k- j4 H9 G$ z& I0 t' d& [. e
upp_buffer_b
=i;
' V" q9 S' D! D( ]
upp_buffer_a
= 0xDEAD;
7 q8 r" P" U) m& O- X _
}
* T. \9 ^- _2 Q6 E& l
7 N% P% U- f" Q1 o3 ?. ?
//for(i=0;i<1024;i++)
) c1 H* p z( g& v( p1 U' l# L& U
// temp
=0;
2 H! g, E# Z7 V; \: [
l9 h- {6 k! ?' B- C: s' Y9 ]
//UPPReset();
! N, [* I* C7 w* w) z
/*启动UPP DMA传输*/
; D1 g$ b5 w+ s8 B
UARTPuts("upp_prog_dma_i\n",-2);
$ u; E$ i4 D' z2 ]8 \4 B
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% z1 f/ W! T, z! w! g9 n
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; e9 }+ U7 K& {, }' w
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 V0 J* j( U5 m6 ?& V2 H9 d
3 X M- ? r, q* c
UARTPuts("upp_prog_dma_i\n",-2);
& D3 e- t- C+ M7 m$ I( C: m5 m
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* `0 D( l7 @5 x* j
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( M* u$ K/ d# I
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% m- \" [) j; I4 T6 Z
" }2 Q' I/ f* y9 y6 J/ F3 s
/*等待UPP传输完毕*/
( Y! P$ K: k; P* F( \! m J5 t
//i=0;
/ D9 f. Y4 J% f. f
//j=0;
h8 g6 x1 k# G, f: \1 L' D
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, }% y+ x8 k4 ]3 Z1 |: j
{
; k' j$ q1 Z9 S" t' d
/* 测试UPP传输的同时操作普通DDR数据
) y# O4 j5 h1 ?/ v
temp
=i;
x( `4 V2 {3 w1 n1 s: p( {
i++;
! T& l1 h+ F5 G6 G0 S0 y
if(i==1024)
6 c, o/ H8 k3 A0 G- V& o; b
{
& K+ I: ~1 i/ ^7 ^/ Y2 s `
i=0;
6 c' v% }' x* f& W. }, p7 M
j++;
: e9 X2 ]% l) c' i% E- g
}
4 P" X; _0 i+ w
*/
% N7 ]0 M6 [6 J! V# F
8 i3 U5 L2 @4 p' x, P) H+ C* x
asm(" nop");
0 ]0 T9 m; ~: U/ k$ k, X( ~
/ h3 b3 H& h- Y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ z$ N1 a4 S9 [
}
% Z& t* _$ f! A* o R
, r) x9 h/ z4 B
/*检查UPP传输的数据是否正确 (loopback modes only)*/
Y; X) m% p& W) Q
//UARTprintf( "i=%d\n",i);
7 y" G% w ]! z" s- A5 V
//UARTprintf( "j=%d\n",j);
) T0 |+ b" a& ~3 r* u. N
UARTPuts("Data mismatch in buffers.\n",-2);
! |5 ~# z, X- \- }, {
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ `; d- H# r1 q; k) I1 c
{
0 {' s- G# }5 b: F: x0 s/ D
for (i = 0; i<upp_frame_size; i++)
, \5 g( L1 Z+ W9 r$ q: w, B7 Z8 }
{
. x5 c2 U+ }; x% k& ^! N4 y
if (upp_buffer_a
!= upp_buffer_b
)
8 d6 o6 E9 S2 B7 w/ C5 z# e* a
{
1 E0 L. e* b5 ]6 G
upp_error_count++;
) Z8 z7 e% H6 x% ?& I; L
}
2 a, r. i: |. b6 N- d8 ~: X
}
3 u5 ~+ g7 V% Q
}
- H# T' A0 h) S- o$ X
& w" u" T! R5 Z5 D! }; V3 W) f
/* 报告通信结果*/
7 I3 D) c) X8 Y* q# C' q/ n$ z
if(upp_error_count != 0)
% P% B3 k* w" Z7 C/ X) t
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 ?% X! f& h2 z
else
8 L$ o4 r/ K# X, y$ F* s% x" M+ l
UARTPuts("uPP transfers complete!\n",-2);
5 ~. N' L j2 m8 c$ D2 Q
, [' ]4 u0 ?5 ]0 |9 {
UARTPuts("Do you want to print all the data?(y/n) ",-2);
5 b9 [& s0 [' l4 j9 P) m; G
UARTGets(ch,2);
+ L$ C+ N# J2 F; a- Y# Z
UARTPuts("\n", -2);
8 P+ _, \: I v* J
3 O, j5 z# d, h9 d3 Y
if(ch[0] == 'y')
d# y- |3 C( g- `4 ]' ^1 O
{
# D7 B9 ?) {7 @
/*打印全部读到的数据*/
6 d& d; p- f1 d7 q1 V8 W
for(i=0; i<upp_frame_size; )
2 g4 j4 u( n. s) I, @9 k! K" [+ }3 e2 Y
{
, X9 D9 m' j* h# e3 ]2 l D
for(j=0; j<5; j++)
& O# G7 e* _. K8 w& F
{
. W- \0 Y, Q/ x S
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
G- v, x6 y! k! F/ ~
i++;
+ c' a* L# g# N# I, y
//if(i >= 4096)
8 k. e; f" H4 F( ^8 t# @
// break;
8 {( K" g+ x0 z2 ?; H- ^
0 k- i8 R, s+ F. |6 @- A8 F% c
}
2 c: [% K( l9 S: b) r. r9 R- c
UARTPuts("\n",-2);
: Z! r! @) ]4 Q7 Q8 \) K1 C- B
}
5 r; B+ d Z: e7 z
}
% n$ A) }) g! A, q# l# L
9 ?0 H0 z+ p0 X0 ~" S% l
}
; u' L: e* k* J5 `
/ c; \, G# e8 @% L' A! l
! `3 O+ S6 z% X P `$ D) m: t
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* L' f$ B4 i* P1 \
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' ]& b9 c- w' C7 K/ J5 X+ O
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4