嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- K) B4 L: H' g8 ], d" T" V' |
Void UPP_TASK(Void)
B/ n/ A: w8 ~ {; F. U
{
; L; u. s2 \ _: C0 d' S
# E' D7 ]5 A* j/ d8 b/ i& Q
int i,j,k,target_int_count=2;
9 E) J; |1 J1 h/ q- M& r0 L) ]
char ch[2];
) ~; Y! Z5 S! P% d X
/ g$ L, Q1 p0 G7 n3 S* q
Y* S0 M/ w7 b" M! s" `
% T+ o2 Z; Z0 @. u3 K! Q
upp_interrupt_count = 0;
" T. f& Y$ o7 F1 r
upp_error_count = 0;
4 m o8 L p- U3 }" x' ?9 s& ?1 T
w) D" t" A/ Z( P' z. l
UARTPuts("\tResetting uPP buffers...\r\n",-2);
o5 Z' T$ g0 W' a3 b! q
// Initialize data buffers
/ |* h( V& Y# B ~
for (i = 0; i < upp_frame_size; i++)
; F7 }! F! w+ r( i8 ]. s9 g% s
{
9 g" N% p( M5 b1 u
upp_buffer_b
=i;
& H0 f8 y& ~5 C5 T
upp_buffer_a
= 0xDEAD;
( L T# M- b5 N$ L: i
}
- m) N9 |! ?* N1 c9 ^
- i2 C' ]- n& \/ |' E" q# s
//for(i=0;i<1024;i++)
. Y" X4 {# q `3 R
// temp
=0;
7 S0 |) t- v5 N6 } b: Y0 o
. Q( g) C6 O& R
//UPPReset();
3 x$ b; e5 F- ]
/*启动UPP DMA传输*/
4 E) ^- i3 |) ]( O& U7 ~
UARTPuts("upp_prog_dma_i\n",-2);
' m, j: Q% ]3 T: f2 ~3 b& O
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 J% h, _" k1 ?( k. ]! z5 z( E. [
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 ~! ~' C! j& T% `, G3 S1 e; A
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! Y+ A: ?5 g+ g4 }" q% e g. W5 q: H
, ? N0 w1 z$ D5 [) a2 P
UARTPuts("upp_prog_dma_i\n",-2);
+ Z) o9 A. g, N+ S3 G( M
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 K" G; u) B: w* ]- `! Q1 r
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( q4 f8 S9 M* I3 J: J& X5 q* d+ d
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* `8 S f. v6 e) `. @% b9 d
: i0 t' }2 H1 ^- }, Q
/*等待UPP传输完毕*/
% \* `7 S' n& {
//i=0;
" M5 X3 K9 V( j6 {
//j=0;
) d. [, {: c2 N) H. U' e! {/ r
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# z* h6 S/ c" V; h2 f
{
7 @3 K% J& D6 B8 s: J! R
/* 测试UPP传输的同时操作普通DDR数据
+ S3 v: F2 s! h6 a4 N' Z% h6 N1 |) o
temp
=i;
" q0 F3 [/ d2 ?+ a) H# `
i++;
) m( a) U' P6 |9 F, H% [
if(i==1024)
. D9 `& v7 `2 [* E8 ?" d/ l7 b
{
: @' T8 d; k& H- c6 g% K3 d3 j
i=0;
" W( G" m" U* K# C' ? Y8 x
j++;
" q# d, {) {- q1 E
}
" |, ?2 ?0 j' {3 {& t: m
*/
}# @7 f9 U: {2 t. U
% J" P# y2 y: s& J6 F
asm(" nop");
0 @% H0 o; t# x
( d# }" ~" R- |. g7 l, ]- `7 ^
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* \0 r; n: k: d6 a
}
7 @. ?* c2 w) w' A( O( n
* y t7 b& w* d
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 I Z7 @' h( O( Y% h
//UARTprintf( "i=%d\n",i);
& e* S" x; E7 z# l( B
//UARTprintf( "j=%d\n",j);
' J/ {4 b' N3 ^, _0 [
UARTPuts("Data mismatch in buffers.\n",-2);
6 l; h% ]) G9 ~- ?0 A$ l
if (upp_interrupt_count == 2 && upp_error_count == 0)
* q+ ~' j* k2 |1 w
{
, t3 [* O7 _1 b# _" J2 f
for (i = 0; i<upp_frame_size; i++)
' i, w( Z9 I l2 }- F4 R! y9 s
{
- D8 F" ?" |- f( N2 }6 I
if (upp_buffer_a
!= upp_buffer_b
)
/ {2 K: l3 v# j5 B) u; r2 g
{
! _3 F! G7 q. {/ m
upp_error_count++;
: C2 d/ T7 Z0 V/ s& }% O/ e$ p9 A
}
f; q, ^& G# x6 v7 ]
}
- p I3 ^: w# Q! y2 s
}
6 d' G3 a5 N5 C2 O3 n9 x; l9 w
% h3 P$ ]% z: `: f _# X# w5 J
/* 报告通信结果*/
* K* O5 _% n0 d6 w0 W3 u" ^
if(upp_error_count != 0)
& L0 c, `0 R' N$ O; [
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. @ t. g. r6 b" h6 T
else
3 [- W0 N* c7 z2 ?1 O0 r0 K
UARTPuts("uPP transfers complete!\n",-2);
: E2 P( ]: Q/ S* F" I
8 O+ `* }! P& W- |4 z
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 i! \ `0 _ q, J
UARTGets(ch,2);
8 c5 q0 ]$ Q; A6 B' T8 q9 t
UARTPuts("\n", -2);
2 ` X6 Y- r: w0 a( u1 a$ e. j# \
8 h! h3 |7 A+ k+ ~ w* c
if(ch[0] == 'y')
; ?( H% T% m6 `) N
{
# K8 V( x2 f( G7 A% R V$ ^2 X
/*打印全部读到的数据*/
7 n0 r. S9 V; E1 m6 D& N7 P3 C7 S4 x" q
for(i=0; i<upp_frame_size; )
5 i. } W$ j: E$ O4 n' \& y
{
1 s& \$ |8 _( c9 U9 A
for(j=0; j<5; j++)
5 ~& w8 _. ?0 R/ U7 H7 [: }
{
# H5 E. F8 ~% |9 Q4 ~: w" F+ ?
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 T5 e, ^5 n/ |3 R/ ^) _; F4 G
i++;
$ y0 k# @3 t+ u" [2 X
//if(i >= 4096)
: _4 [; |3 T7 {! C$ D/ l; _: t
// break;
% j/ m9 m% @8 J5 ]1 K* E2 ^9 W
r3 e( @% K; h/ i
}
8 l- L: h7 P3 @; ~% n
UARTPuts("\n",-2);
# k9 J7 J" o4 Y4 }
}
7 O" E' D1 E- P% ^
}
! M/ v( E( C* K6 c& Y
6 k; M" Q- y; w* _
}
. u9 j) |$ W: c# X3 B
3 \# k9 ^! H, C! Q* M
( A* j: F8 x5 N: S. U& k$ f
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 @+ O: c2 N5 R* N, m
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ L* U" `: Y' g# A
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4