嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% q- A% P P5 w) C0 J* D, |
Void UPP_TASK(Void)
1 F1 p! H7 M0 G) B' v* h. S
{
! A: N0 x& H: W6 J+ a# k1 f
. ~ x7 P' s; t3 [
int i,j,k,target_int_count=2;
A3 {, O7 o6 A6 s# C7 L8 p! M2 [5 j
char ch[2];
' I# `! T0 I1 V: G' G
8 \8 W" F( G0 g0 z3 T/ z" e9 R
- [* O- L/ x- A. p/ [- h
4 T: C. y9 o. x4 W5 H5 h
upp_interrupt_count = 0;
, L* }/ ?' W" t, G1 |' f
upp_error_count = 0;
) N3 J8 X7 r7 ]5 ^8 X& z" m. K
- W# x0 Q2 n! m+ j0 i4 l
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ ]; e( \* T+ f8 G4 I8 r2 Z& o1 @
// Initialize data buffers
1 I" J% \/ T- L) i( c: E4 D2 P3 X
for (i = 0; i < upp_frame_size; i++)
, a: v" b$ Y4 g0 i* ~! h! |
{
: g; F$ m2 e# ]$ n% c; D
upp_buffer_b
=i;
: s) q, S+ i, Y: m$ m z9 A2 X
upp_buffer_a
= 0xDEAD;
" X1 H# `) t5 F8 }
}
1 c& v, G7 A( n
: |4 Z3 {' @- q& I
//for(i=0;i<1024;i++)
2 Z4 O+ N8 W0 g- j8 L& ~ R( n6 I, y
// temp
=0;
( R% N0 Q9 {# [# @4 V
8 r9 @! |* Y1 K! D/ b6 e& @% O
//UPPReset();
& [9 O0 x3 [7 N# O3 U4 }
/*启动UPP DMA传输*/
2 U. I" j: P K" q2 D
UARTPuts("upp_prog_dma_i\n",-2);
" R' r% m# v( q( t6 V* m) h
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. K" z: h4 p f! t/ Q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 k! Y' Q7 N; Q: v" V) [
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 r& K* F2 K W) F
7 F, D0 ~ L. |% J w( O
UARTPuts("upp_prog_dma_i\n",-2);
) w" J6 p4 C$ k# c0 b
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* a4 q5 E) m8 p, n$ [: g
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, z' {. |' _% W; U: h: P
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 H, D* I; X& l: @% @6 R
4 C( ?" P8 W/ A+ d( H) V) n
/*等待UPP传输完毕*/
3 M0 _, ?" C5 t- b' i2 C5 T- ]
//i=0;
5 j3 q! C2 m4 V6 ?( Y3 L5 o
//j=0;
0 x( G9 r0 }" v0 c# l
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
& Z/ V/ C/ @( I+ R; K
{
8 k2 |, S. Z+ S# e5 ~ ]
/* 测试UPP传输的同时操作普通DDR数据
3 t; u$ O! p6 `0 K4 R1 b0 L; ^
temp
=i;
1 @2 _5 Z5 S/ ~4 T2 T- W
i++;
% L% X7 I: i, U, a, Z9 }
if(i==1024)
% F9 G4 ~. B& u- ?1 z
{
u. v" k \( j
i=0;
( ]6 G% V& d8 K, y9 t
j++;
6 p6 \9 x. I( y7 q0 G
}
N2 r/ K3 A+ }! J5 f
*/
7 J$ }4 `3 b& i2 t
! A2 i) ~$ y+ X0 L
asm(" nop");
0 V6 K3 J& d! k1 y& T
5 F, {2 `& N; I5 {, i" L- J' M6 X2 I
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& V( S2 r, v! s/ N" b% ^( H( s! |
}
0 K \. T F4 t+ i8 z
- O" `/ V0 j& m+ t# d
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 y6 B8 U! \/ E) e y9 k6 z
//UARTprintf( "i=%d\n",i);
0 \+ T$ V a. g' V& d0 H# L
//UARTprintf( "j=%d\n",j);
1 s: { L" `! s0 {
UARTPuts("Data mismatch in buffers.\n",-2);
+ w- j$ P' Z2 T( |1 X8 I
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 E- O) k8 b a& j( E
{
7 O8 N l3 A+ x: x
for (i = 0; i<upp_frame_size; i++)
7 U: }: e9 ~5 _2 ~0 `+ w
{
% v! R9 q. Y+ J+ t
if (upp_buffer_a
!= upp_buffer_b
)
' f! `8 W' s- C' m* \
{
" F0 m" W; Q# j5 K* e. S
upp_error_count++;
- v ]& l$ S1 `
}
; |, R2 d; k; W4 ?4 ~) X
}
( W9 n/ R* d" c" Z/ ^$ z
}
, E; u/ r. m6 B s& p+ f
% L1 n9 S- b ~2 F
/* 报告通信结果*/
; p% @2 _8 j6 w8 ?! H
if(upp_error_count != 0)
' o3 N# }' O6 F+ ]+ t+ c* R$ U/ _
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 j4 M+ m$ a9 e7 g, Q( Z0 K4 z( P$ K
else
* A4 [& j# i5 ]9 h. q
UARTPuts("uPP transfers complete!\n",-2);
/ }+ i% \. m% W% F5 j; s- J5 `
5 q) g- V( w4 L
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) a6 E* u3 i2 n' S8 V$ M- }
UARTGets(ch,2);
* T) O; |3 R& H% H) R. Z) j
UARTPuts("\n", -2);
) p3 t0 y, s% J
' a/ q8 ?0 T8 y' u, N5 `
if(ch[0] == 'y')
) e+ D* J0 T3 D$ k
{
: v$ K$ m$ \' H; {5 U7 s
/*打印全部读到的数据*/
1 f2 a ]( j$ j- U+ G6 {
for(i=0; i<upp_frame_size; )
/ r; ?$ k. F# s' o- P X3 R
{
; {1 _( ~# d3 J
for(j=0; j<5; j++)
# Q8 J4 t+ y6 v& Y) ^7 e4 S
{
# E# h E8 ^- Z/ g2 y5 g
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- {. Q! {2 l2 [
i++;
8 W6 f' K* Q6 P6 u* R9 J$ @
//if(i >= 4096)
' t1 z. N- z" i! u. b5 @
// break;
# v' x! b; \: v" \# m8 b9 f
1 k: S, F0 F g; ^4 C6 b; X
}
3 Y! Z( y( H9 }: T) l
UARTPuts("\n",-2);
, E; _9 T% B7 @* _" {$ Y- Z
}
/ m# e$ k# x9 |: m9 D
}
2 Z* {4 O4 S6 P; M$ V# j
8 Z: ], b; k( x" `$ O7 O9 l
}
$ K2 u2 }. I" s) ^4 q
# _8 j+ O+ t2 w( V& N& c- g
2 p/ a$ n9 M a. l m
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 s1 Y+ u! f$ G4 r
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' ^ b* d; T8 k+ U- n
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4