嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 U* J$ D! P' C# z: M% s
Void UPP_TASK(Void)
. R. u# }5 O3 a
{
6 ^( m" C, \7 H B- y1 E
; i" F9 f6 u* f9 M5 O7 ]7 _
int i,j,k,target_int_count=2;
0 W7 g3 i9 x" I# B2 g8 F. V
char ch[2];
8 C3 O. K' g& ?1 N. A7 H
" j8 z$ `; F+ k" {
: _4 }8 c6 l G" X. }' O- l3 w
7 s$ d7 I' T+ \$ M* j* d8 |* _9 M
upp_interrupt_count = 0;
" R; Z: b7 {# ]$ C* E( W+ G0 \, r9 M
upp_error_count = 0;
% h: j/ B5 i+ R; a9 D% O+ p
/ d" e' D' s0 e! V- B! o
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* T5 }8 m( e9 P; d, Z
// Initialize data buffers
0 V9 h3 B/ B" C t# G3 Z
for (i = 0; i < upp_frame_size; i++)
0 a! ^* X3 \) k) |9 e; l
{
; O' N% D# }+ P A: }: |
upp_buffer_b
=i;
9 ^* a- l& h3 _% t* b4 _
upp_buffer_a
= 0xDEAD;
- H0 i4 t* A/ U) ^
}
; x7 P4 a1 T Q! K! m8 k8 s6 M# W
2 v- @+ `8 R7 x9 G- ]. J
//for(i=0;i<1024;i++)
B2 n) ]9 w- U+ q. Y* U
// temp
=0;
; w: |0 t+ j# m* o) W& K( A# E
0 P: y, x( A& N8 P* y. W
//UPPReset();
* [; G# y u6 J2 P2 P% M/ ]" N
/*启动UPP DMA传输*/
' K& |! L0 u- r |' D2 \
UARTPuts("upp_prog_dma_i\n",-2);
6 e: P$ V1 a+ C; J( [
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" g+ B V% S* v& ?, N
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( v, C3 i. a1 _+ a
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" q m, p( q$ z% y1 R
; F5 i x$ i# t E1 r3 E: {
UARTPuts("upp_prog_dma_i\n",-2);
. h8 _! P8 Q' c# a" }, X7 e, v
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! c% ?2 v5 a0 f# d; h* u
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ P2 I' S2 U0 f( z' O) [
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! t6 p! @4 A. [9 c2 Z* H
6 @# x! ]1 r8 P! s) H: S3 O
/*等待UPP传输完毕*/
- h8 ]& j5 R# Z; u0 U7 E. e
//i=0;
+ a' M3 i! {9 V$ g4 Q; _
//j=0;
1 X" a8 P. `: a4 ~. t2 @
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' ~1 s: \2 E+ r+ w# [
{
8 W" O( p2 n0 {7 f: _8 c) [+ \ n# |- R
/* 测试UPP传输的同时操作普通DDR数据
3 Q1 k# z3 x: t$ l9 c
temp
=i;
$ Y6 ~) g. z3 O
i++;
& |8 i' _7 z7 `1 ?
if(i==1024)
6 |/ X: I( _" O M6 H- f
{
# g; Y" y$ _3 [9 T
i=0;
, B1 W! N) I# j$ u0 ]- X$ s
j++;
6 N8 W( e; l5 \
}
% n: s3 R5 T% A+ K. |; P6 c- i; a
*/
& {# b5 j' u. l) w/ s$ H
) j9 v8 Z: ^% H3 W! U" I, ]) Y! X" @
asm(" nop");
! p; Y# P4 w. u5 Y Y9 b5 l- a
* U7 _- Q( G# ?$ {+ g( Z9 l8 r) Y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 Y4 R0 R. H4 y+ s0 l, ^
}
5 D+ U7 b9 J; A" c2 o8 L
* U: S% ?# D$ t
/*检查UPP传输的数据是否正确 (loopback modes only)*/
$ R/ v. y# |. H( b+ z6 g4 w
//UARTprintf( "i=%d\n",i);
' e2 y. e: C& ?' y. r' z
//UARTprintf( "j=%d\n",j);
7 Z# M3 P8 y( r0 z% ~' L: }) j; ~
UARTPuts("Data mismatch in buffers.\n",-2);
3 I1 B* g4 }* ^8 f1 o8 q6 A7 R
if (upp_interrupt_count == 2 && upp_error_count == 0)
: H# x. O1 t* U8 Q3 P( M, H
{
/ ]9 o9 W% k# E6 A
for (i = 0; i<upp_frame_size; i++)
( e2 X5 q6 o% d& K
{
8 |/ x: K& g, c4 x
if (upp_buffer_a
!= upp_buffer_b
)
) l& n4 v) U$ c' V; L
{
: C6 O& [# n6 q: T0 I
upp_error_count++;
7 p5 D1 h* y( M, U* m; H' I
}
2 E8 [/ P" m) h
}
+ P1 \5 s; h6 V, L, A$ y% k
}
3 M6 E( K7 |3 S @
8 l- v, \4 R9 N' X" ~
/* 报告通信结果*/
/ m1 N7 O6 m0 ]
if(upp_error_count != 0)
& X- @, o, L, j: {, s
UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ P3 R. O) x1 X& C7 C7 T; t1 q
else
- g6 ?6 `. s" Q% ]
UARTPuts("uPP transfers complete!\n",-2);
1 }# F1 c% e. x7 Z9 e# p7 g* v) J4 E
3 l" Y% v1 Q6 M$ z
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: k6 N4 g# W; Q5 k. I4 u( V' d. Q9 c
UARTGets(ch,2);
r p- }) e6 q' M. g I4 _
UARTPuts("\n", -2);
( l: T |7 m0 @( Z( s
4 {5 B# W& O T: T) |0 Y' r
if(ch[0] == 'y')
% C+ u3 w+ b5 N3 P, H* n1 u" |
{
8 K% [2 @+ |$ W$ a
/*打印全部读到的数据*/
7 Q, H& O; p- Z8 |% D: p' t
for(i=0; i<upp_frame_size; )
& |, ~4 S4 E5 A6 u& V
{
1 r) `: \$ l. ?+ d$ ]3 O
for(j=0; j<5; j++)
2 D- N- X" T4 E) S8 _
{
) ?% F- {) [3 M, m
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 W" _6 ~) z5 F+ [- {# E" s+ g
i++;
& ^/ J( M. K8 l$ M& n
//if(i >= 4096)
/ J$ I+ v0 {' G( `
// break;
+ P' }. c* H; J; i0 |+ @. y
- b1 Y7 i& m1 Z4 ~4 R r
}
8 w8 d" u& t F, M6 w! F9 p
UARTPuts("\n",-2);
) T+ N! q: K2 h, a( o( v8 @
}
7 O0 _$ T" E: X8 m
}
2 v5 L8 ~' X' r- S' b& J
# b6 O z+ O8 H" H0 M5 Z
}
1 A8 c8 O, Y/ P b% {% ]$ Y
4 T# O% h/ ]) i* ]
2 }: `' K) Q3 c( j. \9 [
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% P v; j6 B4 b
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& t2 f6 p. n; X/ j2 D2 g
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4