C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6071|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
  O3 I& P( i; d! |& P, ~main文件:
1 L( d* K/ a2 {6 [+ I) Minterrupt void interrupt4(void)  
- m- d% D+ T; Y: i{
1 f3 K# m- a% O3 H+ D+ C  Uint32 sample;, S* {5 j9 p( Y! k

1 t& X$ p5 E- g  B: s. b6 Y3 S  sample = input_sample(); // read L + R samples from ADC
7 Y; M8 h3 K* j1 x4 A7 s  output_sample(sample);   // write L + R samples to DAC 5 \9 H# E  B: Z
  return;  I0 l( b+ c9 {7 f& {3 T% L) b- s
}) l8 t# Q! E. M( U* Z. e1 l
0 f! h3 f) j- l2 G0 c
int main( void )
9 b: Y& w5 _+ H  a0 Y2 o% n% G2 x{
3 {3 H& q& U2 g/ d/ V: Y7 Q$ ^+ O( i# U
    /* Initialize BSL */, s! `0 c" H9 _& g& B
    EVMC6747_init( );
7 A$ m( D3 S, e; ?0 q/ g        /* Call evmc6747_intr function */
% [7 e) c9 V* N" R    aic3106_init( );
$ y+ r/ m+ V- K/ C        while(1);
0 k) Z) s! g3 A) u! O8 o}1 G( A7 ^# I: s$ N

& F- B4 t; Q) C" ]
* W5 U1 F  H$ @! uaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) f7 @. E2 ?% `) H
/* Initialize MCASP1 */: [% S2 a  S$ a& c1 y+ \3 {! u
    mcasp = &MCASP_MODULE_1;
+ J8 d% k4 e' Y$ T  x    mcasp->regs->GBLCTL  = 0;       // Reset
: d* v( ^; w# M  e    mcasp->regs->RGBLCTL = 0;       // Reset RX
1 `" D# z, v, ]% [    mcasp->regs->XGBLCTL = 0;       // Reset TX
' x- u/ T( |. I; B    mcasp->regs->PWRDEMU = 1;       // Free-running
, G1 g' w* G* f# |# |2 b   // configure McASP0 receive registers
5 T! [" b! A$ u" |/ w    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used. _$ p9 f& s8 ^2 t
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 ]* O3 W, f9 Z( s& h
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 r1 z" s! p( J    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); H0 S0 q% S$ J% V& @" K' h
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side), D3 P' f* J/ b1 D* F9 p+ b
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1# e+ o4 m3 W, ]. l; L8 R
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; K6 [% T. X  \' G* w$ C* Q4 p    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 s  C+ K: w/ I6 A# C+ o

9 \$ E% K! s3 t8 v' d1 h    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used5 F1 X" G" ]/ e
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. H0 g( `9 H8 ]2 K! M7 m    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ Q7 ]0 L" s: D' A) l7 b
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' F/ K0 I4 E5 }) q+ a8 E0 a6 h/ A    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* j: N; j$ W4 a- m
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 W- Y8 \5 q3 g1 u
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit$ Z1 V/ i' J; |5 U* l8 I. P+ L
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. Z/ m0 M# a8 X4 S( K; d- `- l8 A6 m' X' G) Q
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ W4 W% B3 }5 Q2 m3 O
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
* H2 ]' }$ v& ^  y& q    mcasp->regs->PFUNC      = 0;          // All MCASPs8 P# Y9 Y% e; P. K6 y- a
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1  [! O& O$ R! _0 ?4 y& J2 n
2 I& E+ w. z" V1 W6 g) e! R
    mcasp->regs->DITCTL     = 0x00000000; // Not used
1 R5 n: [- N1 C5 j8 S1 \    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' R$ x. s. }+ |+ R( b6 X8 }    mcasp->regs->AMUTE      = 0x00000000; // Not used6 B' z- `, D% U: R8 p/ w
" d$ E6 y! r% i% x0 r, b
/* Starting sections of the McASP*/
6 F9 b! M: o1 ]' s; A8 ^    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" q: P' O1 M! M2 P" l7 K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
- t9 p' V* c' c. V, g! t- S" r! n; ?    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . g5 t+ v& u/ x* i3 i3 H" K6 a) o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% w; T" ^( ~' j0 L
& i' k1 q: z1 n, P
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; i- }$ ?6 ^: L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) b+ o# j8 g7 h1 Y5 P% Y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 c4 H, v5 t* X  y% G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& b8 a% I, T" X  z4 X6 U& }5 c2 j! W
    mcasp->regs->XSTAT = 0x0000ffff;
" [! H: t4 i. I) E+ v3 X    mcasp->regs->RSTAT = 0x0000ffff;
* Y% Z! T7 z8 m6 s2 L& |& S1 i& k  H$ V2 F( g
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 w  F# ]8 D  }8 X' ]9 E3 D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* U( o0 B4 _1 q0 a8 F
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! G& T) _6 |) ^( [8 q8 y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );, B7 A6 |% v( K

* `' }( p! X7 R" V: n    /* Write a 0, so that no underrun occurs after releasing the state machine */! i8 J  o3 @% f7 K: S
    mcasp->regs->XBUF5 = 0;
) `4 v/ {2 @; k3 P1 ]- _% b6 C    mcasp->regs->RBUF0 = 0;1 W- R/ ~) d9 o

0 g$ q7 r' @) ^, e& n4 Z    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 R2 |$ Q/ c2 s; d2 ^+ d+ f  d% t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' D& ]) A0 ~3 V  t" v' b
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# i$ m# x9 u- B1 ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. A, e2 e, M4 T+ c2 w
" \! F% S( A( z8 Q) Z0 L    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
  w/ ~4 \$ C5 t$ K0 ]  n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
+ {! h5 f5 j! `    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ |* U5 Q1 L9 {, J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# R' U+ B/ e, A: s, c/ ]+ B- n4 V5 ^7 k
    CSR = 0x0000;
# `- @2 ^; W0 }: b( \: A( R    INTC_INTMUX1 = 0x3d;3 N. J  i! v' u) `6 B9 Q' k- W& r
    ISTP = (unsigned int)vectors;
  w2 a* C* K8 ?- Z( a    ICR = 0xFFF0;  7 c9 K* @7 I) f% W6 G
    IER |= 0x12;  
% X4 Z" u: b5 e/ o5 P    CSR |= 0x01;  - i# d+ k) l+ s# l3 h9 [
3 s* y7 _! g4 F& b; w

1 r4 P9 L+ q1 `" @9 Q2 ?2 ]4 N% x; T+ m' G
还有就是两个输入输出函数:! }' [6 Y7 T2 ~. I8 W6 N0 ^
void output_sample(Int32 out_data)$ Y5 `3 v6 f7 `- Q! d0 M1 G5 g
{9 v0 M2 l$ t* g3 o. I) l" Q
  AIC31_data.uint = out_data;  # t$ F- u- O$ Q  Q8 @% A
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
' h& E. H: b. ?2 Q' x2 O}
) n) z! V/ _. r% M8 I0 t( U
4 O! _8 a* f. U$ j& j1 dInt32 input_sample(void)! i  B$ W6 K) A  j- M$ ?
{  
/ g7 o. C, d+ b" S  AIC31_data.uint = MCASP1_RBUF0_32BIT;! Z( |- h' Q9 f. N! I
  return (AIC31_data.uint);0 l+ G* O9 V9 u. F
}2 C& u2 h& p! M1 ]; c4 q

3 h3 A+ S+ a7 k* w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-1-22 00:34 , Processed in 0.041819 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表