嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 @+ e3 I5 ]. }5 C6 {
Void UPP_TASK(Void)
- s W+ ?. a) q8 Z1 U2 W1 w7 Y
{
' U. F. L4 x- d
1 l5 Q1 N5 R9 [+ o+ v
int i,j,k,target_int_count=2;
! [" |% R. U- D0 ]4 A7 d
char ch[2];
5 X! c" A/ K1 }! V |; V& t& {
$ p6 R: A6 i2 n
- ~# ~ D7 F- m6 w# ^9 E% j4 S9 h
, }1 G: O" l+ Y; ~/ Q
upp_interrupt_count = 0;
; B( t+ j# e4 r* S
upp_error_count = 0;
; k K6 M. u( h& f0 R
- k' Z; I8 k, G" F9 j! Q& ]$ E! \
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 Z s* n: F: D! q( u
// Initialize data buffers
2 |( r3 m$ C: @3 K/ K
for (i = 0; i < upp_frame_size; i++)
- L; \& A8 r1 D8 S# V$ C2 m6 C+ s
{
# i, D+ c& J$ H7 [! |/ S* f
upp_buffer_b
=i;
, @# M1 H* R( \+ l: m
upp_buffer_a
= 0xDEAD;
3 O5 n8 Z+ D2 [. m2 c$ l! X
}
; ~. h6 g- k/ {# x( z7 M% o
" b% h) O% q2 f1 s
//for(i=0;i<1024;i++)
$ s$ ?3 V3 g" n r
// temp
=0;
6 v; a6 ?1 ^ c9 Q# n8 ]) O
% G5 _+ t/ Y1 h* u$ p3 W
//UPPReset();
& ^/ j- t1 q* J* i( p4 b, _
/*启动UPP DMA传输*/
% M$ p8 ^, ?2 e5 b# W
UARTPuts("upp_prog_dma_i\n",-2);
0 k9 K. S; `' \
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 P4 a' w: m" `3 p- q5 I$ q: y
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& C0 p5 I& i7 X3 d/ Q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
5 l5 m8 {/ \" G
2 [2 n* ~% P& M3 m' x
UARTPuts("upp_prog_dma_i\n",-2);
/ _, _; u( o( r* k7 C
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 q% v f: y* `+ G
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# z( N+ A; q$ b: U
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
F! s! H# @( }! H. v3 C
5 o) `/ I" N3 L# E
/*等待UPP传输完毕*/
6 B4 T5 W- {" Z) D6 J8 R- ^
//i=0;
( V6 E, S5 a3 \3 F" N
//j=0;
. S. l/ L% G5 O# |& r$ X
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- L3 |$ t1 Q# O7 n
{
6 n5 f0 e$ u" l9 I1 J1 D% ]9 v
/* 测试UPP传输的同时操作普通DDR数据
& i1 R2 Z4 e) q+ ]! f" D1 o
temp
=i;
# \8 [% N' R, w& T
i++;
! `1 l0 S% r* m
if(i==1024)
& S4 p9 u5 w1 R: ^& G5 n1 g i# Y
{
7 }: l% p. z2 R }
i=0;
3 O1 k4 S7 M5 i' ^) v# v
j++;
" \1 l7 l- ~( `9 r2 x0 n* Q: ?
}
" K! _! L0 z2 Y; c, a3 Z
*/
& X/ _$ Q! h A0 J o
5 @" d" O; N6 H- \7 u
asm(" nop");
/ o: k( Z2 \$ G$ d6 m
- K' x; d! D# X( o6 T, P2 { D
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ Y; x# m. M* q; ?0 b
}
1 ~8 s B# C) u
2 a7 F8 B# @1 ]# k: D3 _
/*检查UPP传输的数据是否正确 (loopback modes only)*/
- E' n9 |) C1 o! j c
//UARTprintf( "i=%d\n",i);
* O/ a5 L1 L" Y- R& N: ?- D+ S
//UARTprintf( "j=%d\n",j);
& p% E4 a- j8 {3 w, {
UARTPuts("Data mismatch in buffers.\n",-2);
4 A; J, j' x% H1 M0 V
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 }: k/ n' L8 D2 Y8 ]) I3 h
{
/ _) `5 |2 f. q& s: O2 W5 v
for (i = 0; i<upp_frame_size; i++)
, q6 L( Y! |$ M
{
8 N" B; z2 D+ I9 W" y/ I, u
if (upp_buffer_a
!= upp_buffer_b
)
! X# { _2 ~+ x# |5 y# s: N& A1 t
{
/ T# d- O6 j" W. d& B) v/ [
upp_error_count++;
; [- `/ w9 [$ E' |: B' |, a/ f0 f
}
: W: y0 E) F O6 C* N9 Q
}
- \4 P& T4 R6 I! U& {2 d
}
- |" G& V) U& ^- |7 G. X9 r
0 T* N" C' B$ U
/* 报告通信结果*/
4 x0 H0 `8 s- E3 D
if(upp_error_count != 0)
2 c7 a) V5 D+ W" S: j
UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 h" i' \" M- k; f
else
1 K) c- ] n) Z1 s |, D1 N- V
UARTPuts("uPP transfers complete!\n",-2);
% n) t L- A/ N# I$ v8 O) c4 z
6 }+ ^5 `/ P3 w
UARTPuts("Do you want to print all the data?(y/n) ",-2);
3 r2 M) ~/ e+ ~% m+ s O
UARTGets(ch,2);
w6 @2 P ^& T& U, q
UARTPuts("\n", -2);
% M6 a# p% L' `& Z) J2 [
% A0 m0 h. w" S1 I
if(ch[0] == 'y')
% w2 [! C' Z3 x4 I6 D
{
# A6 G% T) L7 n+ Z5 H& ^; X
/*打印全部读到的数据*/
- S6 ]; J' s; y8 I) L% Y8 }! U2 E
for(i=0; i<upp_frame_size; )
7 w- F& g; b, G8 @
{
1 t) g% z. r0 L6 [& D
for(j=0; j<5; j++)
3 c3 a+ Y9 y1 c- G
{
% W6 h3 A" L, m- Q
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
0 h9 l' r. _. u: v, A! f5 G4 k
i++;
; k" o( L6 t6 ` L
//if(i >= 4096)
2 Q" d4 r) c! g6 r4 i h
// break;
! s# V. C+ x9 O/ D. x
; o0 G) |9 x6 w1 y G
}
9 k; L/ B4 }5 j2 [4 j
UARTPuts("\n",-2);
, s6 O1 [$ i7 C, Y
}
& P# E. x6 w% s$ n9 Y/ @7 N8 v
}
1 t- R% n+ J# G' \* B) j
- S5 B3 n1 o0 D; J9 J4 i4 f
}
% b4 a0 H6 U" a: A, O! u
9 ?7 f& N n' r- R
" c* a, ^7 E/ K' Q4 W; ]* g
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* n4 |2 U* p2 G' q0 Q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" s2 E# V4 x: {
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4