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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! E# k% s! J8 H; v2 o7 @main文件:$ G$ U% P! n  S% N8 b# @
interrupt void interrupt4(void)  0 `+ s  y5 B% e; c4 u
{% _; ]/ e& @1 A4 r
  Uint32 sample;" Y( n$ Q0 j7 {

) N, `+ W0 M1 H  t  sample = input_sample(); // read L + R samples from ADC
* Y+ A, u' C2 l3 n' v" m) s5 d, ]  output_sample(sample);   // write L + R samples to DAC
% K) ?  \$ ]% C7 T  return;, F  Z! i7 P* E, g/ f* s
}3 b7 Q  |, z" j- W$ w9 D* x
) m. B( S2 H, y5 E- A( |: i) t
int main( void )
* e$ w8 Y3 L+ g& \{
. ^, G4 G" e/ v. i% {& u- Y
$ f' [/ h1 F) I" G" y6 k0 S    /* Initialize BSL */. M+ q" v$ j. S3 m
    EVMC6747_init( );
) K7 J( p# ~" N4 @$ i: ?" d4 m        /* Call evmc6747_intr function */+ W; @: G4 m- ]5 H( Q
    aic3106_init( );6 W, G2 {5 z, J$ Z* O& Q5 f
        while(1);
4 ^* X' K0 y3 w4 I: P3 P}" L1 m8 ^& I: i6 S

4 Z2 b  o9 X' T1 S$ ?6 a) x& ]* n8 T0 `: X5 d; o6 @/ w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
  o5 N/ Y: s/ l8 z8 L& N/* Initialize MCASP1 */
/ K0 ]% m. q( u0 v6 Y    mcasp = &MCASP_MODULE_1;* s( e0 @3 {* m" S$ z
    mcasp->regs->GBLCTL  = 0;       // Reset4 c$ L  ~* v, [
    mcasp->regs->RGBLCTL = 0;       // Reset RX2 D# {( {4 c" U5 f0 u
    mcasp->regs->XGBLCTL = 0;       // Reset TX
; F/ z+ r& C9 H3 `2 O    mcasp->regs->PWRDEMU = 1;       // Free-running( {2 V. F# q: o2 F
   // configure McASP0 receive registers
: H+ M, \' l0 n, |    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ u' ]3 P8 W! S
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 X  f/ Y! v+ z6 A
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 Y9 {6 P1 r) J    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& a9 x5 u" J  P# L' k    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
, l9 b1 z  N$ M; g& n; K+ L    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- I/ M1 q* |9 p1 H0 F9 o
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
" x% H5 J* R2 ]( q0 J' w6 P5 N    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ w# w4 `5 h: D" v. J
7 H" G' d# y# h. B6 f6 J
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. D9 {6 \9 j! k  g) ^    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 X% a3 |- Z2 n9 ?; y2 O
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& D+ |. m6 F0 h    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 s" B0 U# E' N
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
3 C( M8 _- S4 C: _0 o2 @1 ~    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
) R$ F( ~5 v. J    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
* U$ l% C8 V# Q- F. M5 s0 X+ d8 P5 }    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 M' A. ?1 |% r) \  n+ T' J# f0 [
6 X5 {+ k. H7 ?, E    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
9 Q# p7 f: \+ v( Z+ r. ^    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
% `! S9 b0 i: u& M( y    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 _9 @( `* {% l& p( j: F    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 d( Z1 m  K" G8 K/ q
2 H4 n( J! p& P
    mcasp->regs->DITCTL     = 0x00000000; // Not used
$ `6 |8 I  p  Y8 G! g    mcasp->regs->DLBCTL     = 0x00000000; // Not used) t8 c( V2 i- _' K5 r& a
    mcasp->regs->AMUTE      = 0x00000000; // Not used
0 s! l+ L5 F1 x7 N8 ?
! c- C7 l- h# K: H  l/ C1 n/* Starting sections of the McASP*/- U' w6 y; _- `& @+ {' H  z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / D1 r" k0 f" d, J  ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
2 S9 r7 S7 g$ |+ q    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 8 G$ Q! G) z. ~  t  U+ R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );  o3 F5 Q" \- ?

( r* F/ y4 m9 `. v    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 @! _/ m+ b4 z  Z1 R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 T& w: B6 K& R- N4 i) b9 K    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. A  ~; ^3 n* C+ ^% r5 e" L0 z% j) E% X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: Z) q- {4 f/ G+ c
7 L3 K1 {+ N! A: j* x1 x' p
    mcasp->regs->XSTAT = 0x0000ffff; # H0 {! q' I2 a7 y
    mcasp->regs->RSTAT = 0x0000ffff; ( E/ I, `$ h6 k1 V  }" g3 @; C
/ u  r" E  l2 O# K
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 n" X- A# u; Q- d* s' U! _! s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 O1 t7 V- f! b$ l- h  e: [- Q2 E
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ e% [; G0 P! Z; R8 K  m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
' J3 W2 E* [& |
, S9 ?% E3 Z! f! _7 ?; I- s    /* Write a 0, so that no underrun occurs after releasing the state machine */
. C5 H+ x6 ]% j7 K) E. s6 E5 \. l    mcasp->regs->XBUF5 = 0;
2 ~. m. D4 U3 W1 f9 g3 W; B    mcasp->regs->RBUF0 = 0;5 y# ^, t) `, @+ {0 S

" i1 D) e5 b# t8 L    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( [/ L0 [3 A- K6 U# v9 i! r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
+ X7 x9 i0 B0 b! X) ~    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; B4 V0 ?7 ^0 Y# f5 [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ ~  I! t6 q# i  [% o) Y+ \  u& Z. G( k* o. x+ s# S
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , O4 ?/ L5 r$ T/ f% Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: u" B5 `9 Z' i2 [6 \+ w% r    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 f( c  e3 k/ W) X: s$ R; P( p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );; [! d2 D3 q, M& J
( M( ]% S9 V# `( c  u; P7 y7 U
    CSR = 0x0000;* n! d3 E) w; x8 k# E7 ~/ y
    INTC_INTMUX1 = 0x3d;% T7 ?& T( Y& Q! t5 D- }
    ISTP = (unsigned int)vectors;
8 |; p+ u8 @4 ?% x2 ?7 s    ICR = 0xFFF0;  
7 y& z- |( V9 m, [1 f& m    IER |= 0x12;  
# B4 H0 x8 f" E" W" P' A5 Z    CSR |= 0x01;  / I5 _6 @  s8 F& e6 F1 a0 S

* I* g0 k& a) q+ m5 K( m' s5 E9 D( `. C3 v# u" ?6 N

/ i1 b- G1 Y# t2 p  F6 S& i还有就是两个输入输出函数:0 k3 W- L# R; {& [
void output_sample(Int32 out_data)
6 w( M% e' D& |" {; j: Q, ]4 [{9 L0 A$ R" T  ~* K
  AIC31_data.uint = out_data;  & U1 E; U) R. Q6 _% D
  MCASP1_XBUF5_32BIT = AIC31_data.uint;9 g7 b' e7 {! @& P" n6 |
}+ v1 m1 @& Y: S4 ^

2 l4 O& Z$ x* V$ iInt32 input_sample(void)
3 H' i/ ]! Q; y& T7 O{  
! o: b2 @( E& N  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 p; z; ]& g* j2 L- b" B  return (AIC31_data.uint);# A; a) w1 z3 h- P
}2 V. P2 [8 ~4 r: v& ^7 n0 ]
5 g! q- ?1 o. T! {( R! ~
分享到:  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-16 17:28 , Processed in 0.042035 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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