嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ T* y" k8 V4 k, B- U9 Y
Void UPP_TASK(Void)
- a1 J2 G3 _* T4 d2 Q2 k& n
{
" D) O. a6 j% Y( }8 |
* w9 l% X6 Z/ | B% m
int i,j,k,target_int_count=2;
" N: q3 x Z m
char ch[2];
: F( f: j% b3 [1 c
2 S- A8 l3 q1 g4 o$ A
/ u. e- s" ~# D: f5 G9 ]
6 Z3 _/ ^7 H" K
upp_interrupt_count = 0;
! G, W& }: q2 p8 t$ ^' L
upp_error_count = 0;
# b5 v5 V0 B! Y9 O) C) ~
- Y2 b( z! F" L9 Q- ?
UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 I# s% l- u) ^! o
// Initialize data buffers
6 l3 r9 N& C* Y; T; m* b' a
for (i = 0; i < upp_frame_size; i++)
9 i3 ^ E5 }" X9 W4 a
{
( A' j* M& F6 R0 R
upp_buffer_b
=i;
. I* p1 @) t; a* A7 S9 d
upp_buffer_a
= 0xDEAD;
8 {3 e1 d' c$ c+ a! R- l
}
! t% \0 D8 } M! x. L+ a5 b
/ Q( J- r+ H' F. r
//for(i=0;i<1024;i++)
) o1 @& B! k. J( h) U
// temp
=0;
% E _: X. G1 }4 K+ H3 Y7 D
- Q) P6 I- f1 F3 q2 w
//UPPReset();
6 C; {4 A/ b* T9 B+ r
/*启动UPP DMA传输*/
( Q- y; ?8 P: v0 i
UARTPuts("upp_prog_dma_i\n",-2);
; h# i: o4 y$ M. S& d. R
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) P7 x4 K+ Y2 b/ e5 }, ~
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 t( O5 a" y9 N) D2 h/ L9 H
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 u1 W4 r. @2 B# Q5 X: z
3 y2 q8 X7 V: u& Z2 _4 U- E9 O
UARTPuts("upp_prog_dma_i\n",-2);
3 m0 A8 D' k/ I( v
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
O6 i& h: n- \' N7 ~) I
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 V4 v! j+ q: d# w
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
N8 f! k( L! J
+ v3 W9 h" {; V; Y
/*等待UPP传输完毕*/
) b. v- j7 {$ \, | k; a0 a z
//i=0;
# @; W1 e: [, h) m
//j=0;
8 a% d( H7 C7 A% q7 u( ?5 @6 W
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# {9 r3 N( J8 p! m& x8 _
{
4 @9 o3 r( G W/ P5 R, i W
/* 测试UPP传输的同时操作普通DDR数据
, X- Q+ @- p1 Q( P+ V+ M1 E' L
temp
=i;
6 b5 [+ W. J' _* r( \! t
i++;
6 s7 f3 K6 J5 ~0 \
if(i==1024)
1 \/ \4 N5 J: G+ K
{
& w6 ]& n4 d- y, i0 R- f+ J4 C0 Q
i=0;
, Y. q j2 h+ Y) Q; E9 O, U
j++;
: ~. n! W4 f7 `2 J, s" v% Q7 R- H8 ]
}
) \% c) F# L; W+ M6 Y% Q
*/
B; k X l; j9 a9 \4 Y: @
. o3 [ t+ K+ l( Y" X: G, a( Q; W5 n
asm(" nop");
2 j5 B- e% f! N# R# y: V
6 C. {1 T$ [3 D7 y9 d# ?
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% t Y4 A2 ]! p, U- k
}
3 o6 f7 W2 L( N+ ~+ F9 h, M
Q8 v- j( ]* a& m/ d( J
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ o* i, ~4 a k7 g7 \" X9 g
//UARTprintf( "i=%d\n",i);
6 d$ D V7 J1 \! x) P2 U4 o
//UARTprintf( "j=%d\n",j);
' M5 ?4 C( m! {0 \8 Y# r
UARTPuts("Data mismatch in buffers.\n",-2);
3 a* U# i' d/ ], K
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 ?/ t2 V6 W5 }9 f* k S
{
9 |- m3 w" Y) `" Y) _- F5 { d
for (i = 0; i<upp_frame_size; i++)
, [1 p5 U2 F4 z# B7 T, ~& C
{
. E; e5 Z2 {2 ~ U- V) P" D
if (upp_buffer_a
!= upp_buffer_b
)
+ x. G# t0 g" s* Q1 k {) g8 n
{
: k8 h; {' ^- i8 H' G; H) M
upp_error_count++;
. {0 Z( W/ t7 ~. v/ k" S# w. a1 x
}
$ c$ z7 C- s2 h/ ~' P% H
}
5 s+ u( i% B* j/ C
}
1 ^( J, q) c& A5 `9 ?
) i$ o9 B d* h9 ?& d
/* 报告通信结果*/
; O( D2 s' N! V" n- d, P
if(upp_error_count != 0)
# ?) ?+ s4 t3 @
UARTprintf( "upp_error_count=%d\n",upp_error_count);
, z v* z- |4 Z$ {% Z+ g' i0 K
else
/ a3 T( z" Z$ s
UARTPuts("uPP transfers complete!\n",-2);
$ _) ]; Y8 D; v9 h6 ^- s8 G
4 e( ?# K2 H8 K
UARTPuts("Do you want to print all the data?(y/n) ",-2);
, F9 P+ G1 ?; n6 R/ i2 Q, z: T$ {8 H; F
UARTGets(ch,2);
$ ?5 o2 W( M0 x( Q$ W6 O" l+ H; ] v
UARTPuts("\n", -2);
' d6 T7 |; Y5 S+ t/ w' r
: m# [8 T4 q# c( k- j# K8 g- `: F
if(ch[0] == 'y')
: w" j9 h2 [6 R7 v% Y
{
2 v: Y/ S" |& ~
/*打印全部读到的数据*/
8 l' ]6 c% M" Q8 S( `: d# P: R
for(i=0; i<upp_frame_size; )
2 u$ u9 H3 ]+ s
{
- }/ `- Z- T' p9 M
for(j=0; j<5; j++)
- w& G3 } V; H+ g
{
% W( X% i- s9 |, Z [8 C
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- H7 }. u6 E/ w6 @/ j: x
i++;
: r" A6 S6 p0 l, u) R
//if(i >= 4096)
N9 P- O; A, I0 o- c$ B5 W
// break;
2 v) h H1 Z; a. x2 D$ y: j: ^
- Q7 g j# U2 J! Q) T& |
}
- M6 G% x; A, j r: L
UARTPuts("\n",-2);
. F* i# |$ S5 Z9 L
}
( d% ~ n5 l( c l- r
}
* T1 F% c% T1 z; O& \6 ~
' w+ O7 {' c- ~8 b0 v$ O
}
N( ~3 j6 Z- J+ X3 L
$ P; N5 j9 H" i- j5 ?7 c+ [
" h* V' [- s2 L
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) {2 Q! A, F5 {" m l9 B* Q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 k4 l/ f/ C; F8 B5 B
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4