嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; _" t3 ]+ T& X# @- r" Q
Void UPP_TASK(Void)
( n" ?* z2 N7 G2 F7 Q
{
! y1 L3 l- C- o1 ]
; i; C5 ^+ L: t" k0 {/ K
int i,j,k,target_int_count=2;
2 _' O$ D* |4 V$ x$ I
char ch[2];
7 l! @ a% h/ }4 {
5 Q6 @4 Q, v7 d; h- a: ^
0 ^* T! _* M: x, u/ ~. v
/ ^8 X; m, v1 U3 ]: _& p
upp_interrupt_count = 0;
- i N& a7 |' k% O
upp_error_count = 0;
: ^' y; |2 P& a" d% ~4 s% \( D
/ F9 V$ g5 W8 G: B
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 C; H# S$ s: M' ]& C3 Z: B
// Initialize data buffers
& v/ c& n' i0 a- w" f
for (i = 0; i < upp_frame_size; i++)
4 S. x, r/ _" P
{
: Q" }2 T! w# Y7 T+ A( m: |
upp_buffer_b
=i;
! c( E9 W$ [. {6 l- p
upp_buffer_a
= 0xDEAD;
- @% J& Y' l+ E/ p
}
$ m) j2 k) q, B1 f' S- j, v6 B5 @8 z
/ `; Y. z2 E1 z' k( \
//for(i=0;i<1024;i++)
! ^) x, J6 z6 U9 f# `
// temp
=0;
/ f2 Y x. s4 a3 o. P6 I q
: {8 R0 W- V6 C/ Z/ r9 z- }
//UPPReset();
B2 P; C& K- y" B0 Y1 D
/*启动UPP DMA传输*/
T0 E1 a3 T" ~
UARTPuts("upp_prog_dma_i\n",-2);
: M0 Z2 N+ v$ _/ E) U- X
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ ]6 ?& g& ?- ~ x3 n: T
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% ^+ ]5 @+ j n0 g; ^ F' D
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
! G) M2 B. n% r! O1 }( N* h* ] k
2 U+ h# Y8 L! W9 {$ r) I C7 d, O
UARTPuts("upp_prog_dma_i\n",-2);
( Q! s' d5 e1 K Z; H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% M2 h$ V7 w2 P: |, m! G
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- x3 p o2 c+ W# {
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" s& w# D% N* o4 ~. B5 N4 _: i
. T3 C K3 J7 k. Z H( E6 l
/*等待UPP传输完毕*/
6 y: [% v3 s$ R9 T7 G! \
//i=0;
- O4 i, L; K& ?- o) o5 P6 ~3 X
//j=0;
' `' W1 `! u9 C% O* w
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* C: m u5 N) L5 i; w6 m1 m# z
{
) D P( b* G8 Y a- o0 x' P
/* 测试UPP传输的同时操作普通DDR数据
3 p" i& \3 ]* O$ F6 G( }& ?. E
temp
=i;
: g7 M! |1 ?5 `8 o; B+ \4 w7 K
i++;
: t, K6 T! H# v/ u6 r- M# m( R+ E
if(i==1024)
4 t3 R, q+ `" B( l0 ^
{
9 J2 S3 h8 ]1 e2 R
i=0;
1 G" G" Q# G- X# G, G$ X$ A! K4 h
j++;
3 I. z) q4 C; }0 d2 f9 n1 w
}
! \# F4 m* T( Q1 w4 M1 E# Z; }1 i
*/
/ s7 U. W0 j1 L4 u6 o+ f6 M
$ w7 t" L( V) f6 c' U: A5 K
asm(" nop");
8 r& c% o m5 M7 R; _: g- @
4 z" j9 o( U2 ?$ A# a
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 S! B1 T# C1 ~0 Z& \6 b
}
+ F, Z% E1 q/ T, {
1 Y5 G% y9 E" N# k F9 }6 L, w
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( ~8 M9 C1 h6 n' C- b
//UARTprintf( "i=%d\n",i);
# l- _* I/ {+ M5 j* I: V
//UARTprintf( "j=%d\n",j);
" X' K9 K" t# E2 `" ]
UARTPuts("Data mismatch in buffers.\n",-2);
h; U3 z7 V" I. M/ V- t1 u! V
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 I4 X# [1 T8 \- u, X
{
: L: Z0 k- U# f8 ~9 H i1 X5 z9 `
for (i = 0; i<upp_frame_size; i++)
' U, f3 F! o+ \+ c- D
{
* l: X/ E; l# ` ^6 `7 ?
if (upp_buffer_a
!= upp_buffer_b
)
( i9 y' u+ T' ]
{
! L9 i# T) O! H* N% c9 |
upp_error_count++;
, I+ K/ o: N! _/ d1 Z ]7 C5 y6 S
}
! P" H( }) w5 R0 J: @4 W
}
# e3 @/ G) D+ R4 V: I m, r4 a, t
}
4 l9 t8 ~# w6 F: U! z9 c( ]8 ^# k
# p7 d+ s4 X( }! a9 [! G& x) }
/* 报告通信结果*/
7 e6 x ]- {3 d# S* G; l9 {% k n
if(upp_error_count != 0)
! F" Y/ H: q" Y2 j% u
UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 Z5 G0 x: R9 S2 s
else
; c: }! s3 L& t) R- x5 W" U
UARTPuts("uPP transfers complete!\n",-2);
z7 U N2 K, O
# W9 r9 v. X* ~2 A
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- v/ s/ c0 s5 m- G9 c% o0 f9 W+ V
UARTGets(ch,2);
* D) I/ a6 [5 Q+ E. n H: }
UARTPuts("\n", -2);
+ v8 s( q& ^ V3 e
) x' c* t& x6 M1 K, Z& @
if(ch[0] == 'y')
7 M6 p+ M5 A; }9 v
{
' N: A# }! L% T7 N+ ^/ b& X' u; s
/*打印全部读到的数据*/
7 i6 C1 \0 n- @! }
for(i=0; i<upp_frame_size; )
$ W- V9 i' y- X6 U; W: T: Q
{
6 F, ?! v; t7 n! @+ I2 r
for(j=0; j<5; j++)
, j# Z$ A' |% X R! {
{
- V# b! K% r5 Q8 @- q7 T+ V# d
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( {1 Q$ q! e* |- h% L
i++;
" A) J7 R- ^- E2 j" R! O
//if(i >= 4096)
# ]* V7 P! Q- n8 B* o8 A, s6 ^
// break;
5 l0 K" @$ {8 N' L! I; V
% l# B8 Z: \" Q! p4 E2 i
}
) |/ K" M( \7 G8 ~& M+ B6 m. ]
UARTPuts("\n",-2);
! R* x9 ?* G7 c9 P1 S
}
f) ?7 C( G7 l+ U; ?
}
9 z. g8 {! K2 W b
1 n: d6 C( O# v* x
}
0 k2 A) ~$ ]! p( } r, p
) z9 j1 Y7 K6 `$ z3 i
7 O: I( F' Z- m9 [/ S# b7 k3 I
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 p; H% {: w9 C7 ?# a" R+ ~
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, R( H$ @5 e7 I( u
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4