嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 A C& a- l" W: P8 J+ w
Void UPP_TASK(Void)
/ U# I ?7 B9 d+ X$ v
{
) D: Q5 f3 {1 b1 h
# Q. J0 j* p3 k3 @
int i,j,k,target_int_count=2;
/ {: K& X( Y- U8 Q( [$ [
char ch[2];
' w8 O; _5 g6 f) k& |" h6 [8 `6 N
( S+ W5 @; w5 i" O0 b
6 c. Q- [# X+ a9 b" G
3 X- C; ~/ ?3 D- U% T+ h6 }
upp_interrupt_count = 0;
5 a3 U. Z( }0 U0 @ Y5 L
upp_error_count = 0;
# R0 u- D: B3 m- ?
0 d8 _1 u+ z( B$ @: u1 h& b
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 s R. ~$ Q a2 Q
// Initialize data buffers
! C1 E5 V& P$ R* }" q
for (i = 0; i < upp_frame_size; i++)
1 s8 }6 s/ l' s1 ], T' [- S
{
. W/ G0 s4 H7 y5 p8 \5 h" x% V/ d
upp_buffer_b
=i;
5 E+ {$ h# N8 Q' Z! A% c
upp_buffer_a
= 0xDEAD;
5 }/ I& J0 T4 }# f
}
/ W9 z* r$ |& w' F8 S) [
3 N- G# p, c9 d8 O* ^
//for(i=0;i<1024;i++)
( T. g; Y/ Y% ^' }9 j2 |5 F. T
// temp
=0;
, u" M3 l4 S% j9 F7 O5 \/ W" W
$ } B& `" m" d1 x, S
//UPPReset();
+ N; x0 G$ x! H
/*启动UPP DMA传输*/
$ x- G1 ]9 @( Q4 d2 I$ B
UARTPuts("upp_prog_dma_i\n",-2);
% S7 H4 z/ ^0 ?, C) H$ P6 C6 ~
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 _( _" e, ]7 t* T
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 _; ~ \: w. z. l) J, ?5 g- p9 Q/ A
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) c% h# k, [# g" {
8 a# O; u, S, u+ w: z* K; y2 D( s
UARTPuts("upp_prog_dma_i\n",-2);
- f+ J$ e* T7 N2 s
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ D2 \/ r+ U6 {) u5 y
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
T7 t. Q4 T# E) q1 W1 P- r3 S8 ]
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ @0 Q/ w' n$ Z2 w" x+ s; U
, Y: H2 Y9 u/ n% k4 {( C
/*等待UPP传输完毕*/
) ?. t8 d- o' I8 j! u& V, s5 B
//i=0;
1 o q1 \% z; `6 C9 f0 r. f9 h
//j=0;
: P6 D+ [# |' r& ^$ ?; B
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 {6 P- W3 g. R1 ~$ s
{
9 ^$ i# q8 k- E: U7 L
/* 测试UPP传输的同时操作普通DDR数据
" o+ x7 n: j5 C6 \. S
temp
=i;
; H' d9 j( ]4 |5 D6 c. j
i++;
/ r; F4 X, V: i2 w
if(i==1024)
7 z- P7 U6 w6 Y- B0 F3 x6 ~( s
{
* b1 K4 Z0 Z$ h
i=0;
9 V4 X3 u5 w! `, S
j++;
# @+ ]: S+ \( ?8 o( [
}
, u% v+ V2 ^, Z9 e
*/
9 ~- B6 Y) m$ o' L5 T' n) M5 O! F
( [8 O. ]: ?: g8 i
asm(" nop");
2 W" f9 O0 ^$ F
4 s1 z8 }' k1 u$ }+ H! I( j
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ `2 K: c+ ^ t) o( g' ^
}
5 E1 R, E, [% P! Y5 L5 S
, p+ n, s4 c: X9 J5 c8 T, x, I( |( H" q
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' {1 g$ ] |6 H# {
//UARTprintf( "i=%d\n",i);
$ R @2 n, t0 ]5 j: K- d
//UARTprintf( "j=%d\n",j);
6 {$ b2 p5 f3 X; ]0 Z! y( N- d
UARTPuts("Data mismatch in buffers.\n",-2);
( F: o& \$ d* |: P
if (upp_interrupt_count == 2 && upp_error_count == 0)
! S- z4 g4 ~' r
{
6 ?$ H* L' Q$ O- w( A7 s
for (i = 0; i<upp_frame_size; i++)
4 r, ?# |, X) a' |' n# g1 E4 Y5 A
{
/ G7 i0 J X- R8 c" X5 f
if (upp_buffer_a
!= upp_buffer_b
)
1 d a# B; G9 P* S. Y1 N* [
{
7 m8 n& A' ]" Q! x$ q+ G3 q% ?
upp_error_count++;
8 [% m) F, w3 d) Z9 p3 A
}
: N8 w) y9 r& Z0 P" k" Y1 N
}
, L9 \0 E0 H0 H W' s+ D, \2 @; g
}
6 T) r5 @' }! @7 x
1 e/ _( ? ^! w! c; O: ^1 U
/* 报告通信结果*/
" F# U$ r9 v# I5 P
if(upp_error_count != 0)
1 P! s4 `2 ?$ Q2 q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* g V! `+ B% T
else
7 R' O" `& @$ n7 h8 d
UARTPuts("uPP transfers complete!\n",-2);
6 R/ P$ ]; a' g# p/ E/ e- y
- H8 L& |0 C L, f
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 ]+ F/ ]2 g/ I* U, v
UARTGets(ch,2);
! T8 C% o6 f0 b7 a- p$ I# s
UARTPuts("\n", -2);
7 K+ ?- m: r- G" v' `8 Y
; ?, q& B! v! {$ v5 _+ \0 S1 `2 Y
if(ch[0] == 'y')
, l, a" T W6 S2 q6 x& m
{
# L8 G6 t9 [+ Z* O1 a! k
/*打印全部读到的数据*/
" F8 v9 g) e8 h* j$ T, Y6 d7 w
for(i=0; i<upp_frame_size; )
. ?) k$ n# V3 e3 [' f8 v
{
- }( ]$ q9 o+ a" @# P! w8 X
for(j=0; j<5; j++)
: I+ i) j( I9 i, s6 {3 Y
{
# g( ?7 A" c" u5 o, ]! C
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 O% g1 e- g7 _# o
i++;
6 {. w" p" R0 B1 j* {& ]$ [$ `* y
//if(i >= 4096)
1 E) z1 D1 F9 ~6 a7 ~. Q D
// break;
8 r" G2 {; u. p! W+ R/ }/ X, ]8 @
% {, o/ T% y+ H6 z' ~& L7 D% ~
}
- e# p5 I. c B5 L V8 I7 j
UARTPuts("\n",-2);
! ]: c" j* J0 d4 F4 A
}
- @4 y, j' H( O+ m8 C# \. ]1 f! N
}
) [0 {2 m3 C( ~
/ B4 [1 g/ p0 [$ s" @/ [! \
}
! o: p2 e( W- S! q+ t
5 S3 d1 c- X; g6 G5 k
5 b; A9 O- q* c$ A
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 d: t" f" Z, U, `
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 N1 T) A8 B/ ^' _' g# f: K8 M
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4